Skip to content

Commit f4e4c92

Browse files
authored
Merge pull request #1293 from natecook1000/nc-fpexactly
Fix NSNumber bridging test for FloatingPoint(exactly:) fix
2 parents 1a068fb + 478566f commit f4e4c92

File tree

1 file changed

+58
-19
lines changed

1 file changed

+58
-19
lines changed

TestFoundation/TestNSNumberBridging.swift

Lines changed: 58 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -242,13 +242,16 @@ class TestNSNumberBridging : XCTestCase {
242242
XCTAssertEqual(Int(exactly: interestingValue), int)
243243
let uint = UInt(exactly: number!)
244244
XCTAssertEqual(UInt(exactly: interestingValue), uint)
245+
245246
let float = Float(exactly: number!)
246247
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 {
250249
testFloat(expectedFloat, float)
250+
} else {
251+
XCTAssertNil(float)
252+
XCTAssertNil(expectedFloat)
251253
}
254+
252255
let double = Double(exactly: number!)
253256
let expectedDouble = Double(exactly: int32!)
254257
testDouble(expectedDouble, double)
@@ -284,12 +287,16 @@ class TestNSNumberBridging : XCTestCase {
284287
XCTAssertEqual(Int(exactly: interestingValue), int)
285288
let uint = UInt(exactly: number!)
286289
XCTAssertEqual(UInt(exactly: interestingValue), uint)
290+
287291
let float = Float(exactly: number!)
288292
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 {
291294
testFloat(expectedFloat, float)
295+
} else {
296+
XCTAssertNil(float)
297+
XCTAssertNil(expectedFloat)
292298
}
299+
293300
let double = Double(exactly: number!)
294301
let expectedDouble = Double(exactly: uint32!)
295302
testDouble(expectedDouble, double)
@@ -325,10 +332,17 @@ class TestNSNumberBridging : XCTestCase {
325332
XCTAssertEqual(Int(exactly: interestingValue), int)
326333
let uint = UInt(exactly: number!)
327334
XCTAssertEqual(UInt(exactly: interestingValue), uint)
335+
328336
let float = Float(exactly: number!)
329-
XCTAssertEqual(Float(interestingValue), float)
330337
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+
}
332346
}
333347
let bridged = interestingValue._bridgeToObjectiveC()
334348
testNumber(bridged)
@@ -361,10 +375,16 @@ class TestNSNumberBridging : XCTestCase {
361375
XCTAssertEqual(Int(exactly: interestingValue), int)
362376
let uint = UInt(exactly: number!)
363377
XCTAssertEqual(UInt(exactly: interestingValue), uint)
378+
364379
let float = Float(exactly: number!)
365-
XCTAssertEqual(Float(interestingValue), float)
366380
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+
}
368388
}
369389
let bridged = interestingValue._bridgeToObjectiveC()
370390
testNumber(bridged)
@@ -397,10 +417,17 @@ class TestNSNumberBridging : XCTestCase {
397417
XCTAssertEqual(Int(exactly: interestingValue), int)
398418
let uint = UInt(exactly: number!)
399419
XCTAssertEqual(UInt(exactly: interestingValue), uint)
420+
400421
let float = Float(exactly: number!)
401-
XCTAssertEqual(Float(interestingValue), float)
402422
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+
}
404431
}
405432
let bridged = interestingValue._bridgeToObjectiveC()
406433
testNumber(bridged)
@@ -433,10 +460,16 @@ class TestNSNumberBridging : XCTestCase {
433460
XCTAssertEqual(Int(exactly: interestingValue), int)
434461
let uint = UInt(exactly: number!)
435462
XCTAssertEqual(UInt(exactly: interestingValue), uint)
463+
436464
let float = Float(exactly: number!)
437-
XCTAssertEqual(Float(interestingValue), float)
438465
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+
}
440473
}
441474
let bridged = interestingValue._bridgeToObjectiveC()
442475
testNumber(bridged)
@@ -474,9 +507,12 @@ class TestNSNumberBridging : XCTestCase {
474507
let expectedFloat = interestingValue
475508
testFloat(expectedFloat, float)
476509

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+
}
480516
}
481517
let bridged = interestingValue._bridgeToObjectiveC()
482518
testNumber(bridged)
@@ -514,9 +550,12 @@ class TestNSNumberBridging : XCTestCase {
514550
let expectedFloat = Float(reasonably: interestingValue)
515551
testFloat(expectedFloat, float)
516552

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+
}
520559
}
521560
let bridged = interestingValue._bridgeToObjectiveC()
522561
testNumber(bridged)

0 commit comments

Comments
 (0)