@@ -242,13 +242,16 @@ class TestNSNumberBridging : XCTestCase {
242
242
XCTAssertEqual ( Int ( exactly: interestingValue) , int)
243
243
let uint = UInt ( exactly: number!)
244
244
XCTAssertEqual ( UInt ( exactly: interestingValue) , uint)
245
+
245
246
let float = Float ( exactly: number!)
246
247
let expectedFloat = Float ( exactly: int32!)
247
- // these are disabled because of https://bugs.swift.org/browse/SR-4634
248
- if ( int32! != Int32 . min && int32! != Int32 . max &&
249
- int32! != Int32 . min + 1 && int32! != Int32 . max - 1 ) {
248
+ if int32! != Int32 . min + 1 && int32! < Int32 . max - 1 {
250
249
testFloat ( expectedFloat, float)
250
+ } else {
251
+ XCTAssertNil ( float)
252
+ XCTAssertNil ( expectedFloat)
251
253
}
254
+
252
255
let double = Double ( exactly: number!)
253
256
let expectedDouble = Double ( exactly: int32!)
254
257
testDouble ( expectedDouble, double)
@@ -284,12 +287,16 @@ class TestNSNumberBridging : XCTestCase {
284
287
XCTAssertEqual ( Int ( exactly: interestingValue) , int)
285
288
let uint = UInt ( exactly: number!)
286
289
XCTAssertEqual ( UInt ( exactly: interestingValue) , uint)
290
+
287
291
let float = Float ( exactly: number!)
288
292
let expectedFloat = Float ( exactly: uint32!)
289
- // these are disabled because of https://bugs.swift.org/browse/SR-4634
290
- if ( uint32! != UInt32 . max && uint32! != UInt32 . max - 1 ) {
293
+ if uint32! < UInt32 . max - 1 {
291
294
testFloat ( expectedFloat, float)
295
+ } else {
296
+ XCTAssertNil ( float)
297
+ XCTAssertNil ( expectedFloat)
292
298
}
299
+
293
300
let double = Double ( exactly: number!)
294
301
let expectedDouble = Double ( exactly: uint32!)
295
302
testDouble ( expectedDouble, double)
@@ -325,10 +332,17 @@ class TestNSNumberBridging : XCTestCase {
325
332
XCTAssertEqual ( Int ( exactly: interestingValue) , int)
326
333
let uint = UInt ( exactly: number!)
327
334
XCTAssertEqual ( UInt ( exactly: interestingValue) , uint)
335
+
328
336
let float = Float ( exactly: number!)
329
- XCTAssertEqual ( Float ( interestingValue) , float)
330
337
let double = Double ( exactly: number!)
331
- XCTAssertEqual ( Double ( interestingValue) , double)
338
+ if int64! != Int64 . min + 1 && int64! < Int64 . max - 1 {
339
+ // Note: Double/Float(exactly: Int64.min) != nil
340
+ XCTAssertEqual ( Float ( interestingValue) , float)
341
+ XCTAssertEqual ( Double ( interestingValue) , double)
342
+ } else {
343
+ XCTAssertNil ( float)
344
+ XCTAssertNil ( double)
345
+ }
332
346
}
333
347
let bridged = interestingValue. _bridgeToObjectiveC ( )
334
348
testNumber ( bridged)
@@ -361,10 +375,16 @@ class TestNSNumberBridging : XCTestCase {
361
375
XCTAssertEqual ( Int ( exactly: interestingValue) , int)
362
376
let uint = UInt ( exactly: number!)
363
377
XCTAssertEqual ( UInt ( exactly: interestingValue) , uint)
378
+
364
379
let float = Float ( exactly: number!)
365
- XCTAssertEqual ( Float ( interestingValue) , float)
366
380
let double = Double ( exactly: number!)
367
- XCTAssertEqual ( Double ( interestingValue) , double)
381
+ if uint64! < UInt64 . max - 1 {
382
+ XCTAssertEqual ( Float ( interestingValue) , float)
383
+ XCTAssertEqual ( Double ( interestingValue) , double)
384
+ } else {
385
+ XCTAssertNil ( float)
386
+ XCTAssertNil ( double)
387
+ }
368
388
}
369
389
let bridged = interestingValue. _bridgeToObjectiveC ( )
370
390
testNumber ( bridged)
@@ -397,10 +417,17 @@ class TestNSNumberBridging : XCTestCase {
397
417
XCTAssertEqual ( Int ( exactly: interestingValue) , int)
398
418
let uint = UInt ( exactly: number!)
399
419
XCTAssertEqual ( UInt ( exactly: interestingValue) , uint)
420
+
400
421
let float = Float ( exactly: number!)
401
- XCTAssertEqual ( Float ( interestingValue) , float)
402
422
let double = Double ( exactly: number!)
403
- XCTAssertEqual ( Double ( interestingValue) , double)
423
+ if int! != Int . min + 1 && int! < Int . max - 1 {
424
+ // Double/Float(exactly: Int.min) != nil
425
+ XCTAssertEqual ( Float ( interestingValue) , float)
426
+ XCTAssertEqual ( Double ( interestingValue) , double)
427
+ } else {
428
+ XCTAssertNil ( float)
429
+ XCTAssertNil ( double)
430
+ }
404
431
}
405
432
let bridged = interestingValue. _bridgeToObjectiveC ( )
406
433
testNumber ( bridged)
@@ -433,10 +460,16 @@ class TestNSNumberBridging : XCTestCase {
433
460
XCTAssertEqual ( Int ( exactly: interestingValue) , int)
434
461
let uint = UInt ( exactly: number!)
435
462
XCTAssertEqual ( UInt ( exactly: interestingValue) , uint)
463
+
436
464
let float = Float ( exactly: number!)
437
- XCTAssertEqual ( Float ( interestingValue) , float)
438
465
let double = Double ( exactly: number!)
439
- XCTAssertEqual ( Double ( interestingValue) , double)
466
+ if uint! < UInt . max - 1 {
467
+ XCTAssertEqual ( Float ( interestingValue) , float)
468
+ XCTAssertEqual ( Double ( interestingValue) , double)
469
+ } else {
470
+ XCTAssertNil ( float)
471
+ XCTAssertNil ( double)
472
+ }
440
473
}
441
474
let bridged = interestingValue. _bridgeToObjectiveC ( )
442
475
testNumber ( bridged)
@@ -474,9 +507,12 @@ class TestNSNumberBridging : XCTestCase {
474
507
let expectedFloat = interestingValue
475
508
testFloat ( expectedFloat, float)
476
509
477
- let double = Double ( truncating: number!)
478
- let expectedDouble = Double ( reasonably: interestingValue)
479
- testDouble ( expectedDouble, double)
510
+ // FIXME: Double.nan doesn't round-trip through NSNumber
511
+ if !interestingValue. isNaN {
512
+ let double = Double ( exactly: number!)
513
+ let expectedDouble = Double ( exactly: interestingValue)
514
+ testDouble ( expectedDouble, double)
515
+ }
480
516
}
481
517
let bridged = interestingValue. _bridgeToObjectiveC ( )
482
518
testNumber ( bridged)
@@ -514,9 +550,12 @@ class TestNSNumberBridging : XCTestCase {
514
550
let expectedFloat = Float ( reasonably: interestingValue)
515
551
testFloat ( expectedFloat, float)
516
552
517
- let double = Double ( exactly: number!)
518
- let expectedDouble = interestingValue
519
- testDouble ( expectedDouble, double)
553
+ // FIXME: Double.nan doesn't round-trip through NSNumber
554
+ if !interestingValue. isNaN {
555
+ let double = Double ( exactly: number!)
556
+ let expectedDouble = Double ( exactly: interestingValue)
557
+ testDouble ( expectedDouble, double)
558
+ }
520
559
}
521
560
let bridged = interestingValue. _bridgeToObjectiveC ( )
522
561
testNumber ( bridged)
0 commit comments