Skip to content

Commit 2d02e61

Browse files
authored
Merge pull request #1651 from spevans/pr_sr_8407_42
2 parents 4c63b3e + 6735f21 commit 2d02e61

File tree

3 files changed

+87
-2
lines changed

3 files changed

+87
-2
lines changed

Foundation/NSNumber.swift

+7-2
Original file line numberDiff line numberDiff line change
@@ -541,8 +541,13 @@ extension Bool : _ObjectiveCBridgeable {
541541
}
542542

543543
public static func _conditionallyBridgeFromObjectiveC(_ x: NSNumber, result: inout Bool?) -> Bool {
544-
result = x.boolValue
545-
return true
544+
if x.intValue == 0 || x.intValue == 1 {
545+
result = x.boolValue
546+
return true
547+
} else {
548+
result = nil
549+
return false
550+
}
546551
}
547552

548553
public static func _unconditionallyBridgeFromObjectiveC(_ source: NSNumber?) -> Bool {

TestFoundation/TestNSNumber.swift

+48
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ class TestNSNumber : XCTestCase {
3535
("test_objCType", test_objCType ),
3636
("test_stringValue", test_stringValue),
3737
("test_Equals", test_Equals),
38+
("test_boolValue", test_boolValue),
3839
]
3940
}
4041

@@ -1214,4 +1215,51 @@ class TestNSNumber : XCTestCase {
12141215
XCTAssertEqual(NSNumber(value: Double.greatestFiniteMagnitude).compare(NSNumber(value: 0)), ComparisonResult.orderedDescending)
12151216
XCTAssertTrue(NSNumber(value: Double(-0.0)) == NSNumber(value: Double(0.0)))
12161217
}
1218+
1219+
func test_boolValue() {
1220+
XCTAssertEqual(NSNumber(value: UInt8.max).boolValue, true)
1221+
XCTAssertEqual(NSNumber(value: UInt8.min).boolValue, false)
1222+
1223+
XCTAssertEqual(NSNumber(value: UInt16.max).boolValue, true)
1224+
XCTAssertEqual(NSNumber(value: UInt16.min).boolValue, false)
1225+
1226+
XCTAssertEqual(NSNumber(value: UInt32.max).boolValue, true)
1227+
XCTAssertEqual(NSNumber(value: UInt32.min).boolValue, false)
1228+
1229+
XCTAssertEqual(NSNumber(value: UInt64.max).boolValue, true)
1230+
XCTAssertEqual(NSNumber(value: UInt64.min).boolValue, false)
1231+
1232+
XCTAssertEqual(NSNumber(value: UInt.max).boolValue, true)
1233+
XCTAssertEqual(NSNumber(value: UInt.min).boolValue, false)
1234+
1235+
XCTAssertEqual(NSNumber(value: Int8.max).boolValue, true)
1236+
XCTAssertEqual(NSNumber(value: Int8.max - 1).boolValue, true)
1237+
XCTAssertEqual(NSNumber(value: Int8.min).boolValue, true)
1238+
XCTAssertEqual(NSNumber(value: Int8.min + 1).boolValue, true)
1239+
XCTAssertEqual(NSNumber(value: Int8(-1)).boolValue, true)
1240+
1241+
XCTAssertEqual(NSNumber(value: Int16.max).boolValue, true)
1242+
XCTAssertEqual(NSNumber(value: Int16.max - 1).boolValue, true)
1243+
XCTAssertEqual(NSNumber(value: Int16.min).boolValue, true)
1244+
XCTAssertEqual(NSNumber(value: Int16.min + 1).boolValue, true)
1245+
XCTAssertEqual(NSNumber(value: Int16(-1)).boolValue, true)
1246+
1247+
XCTAssertEqual(NSNumber(value: Int32.max).boolValue, true)
1248+
XCTAssertEqual(NSNumber(value: Int32.max - 1).boolValue, true)
1249+
XCTAssertEqual(NSNumber(value: Int32.min).boolValue, true)
1250+
XCTAssertEqual(NSNumber(value: Int32.min + 1).boolValue, true)
1251+
XCTAssertEqual(NSNumber(value: Int32(-1)).boolValue, true)
1252+
1253+
XCTAssertEqual(NSNumber(value: Int64.max).boolValue, true)
1254+
XCTAssertEqual(NSNumber(value: Int64.max - 1).boolValue, true)
1255+
XCTAssertEqual(NSNumber(value: Int64.min).boolValue, false) // Darwin compatibility
1256+
XCTAssertEqual(NSNumber(value: Int64.min + 1).boolValue, true)
1257+
XCTAssertEqual(NSNumber(value: Int64(-1)).boolValue, true)
1258+
1259+
XCTAssertEqual(NSNumber(value: Int.max).boolValue, true)
1260+
XCTAssertEqual(NSNumber(value: Int.max - 1).boolValue, true)
1261+
XCTAssertEqual(NSNumber(value: Int.min).boolValue, false) // Darwin compatibility
1262+
XCTAssertEqual(NSNumber(value: Int.min + 1).boolValue, true)
1263+
XCTAssertEqual(NSNumber(value: Int(-1)).boolValue, true)
1264+
}
12171265
}

TestFoundation/TestNSNumberBridging.swift

+32
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ class TestNSNumberBridging : XCTestCase {
2424
("testNSNumberBridgeFromDouble", testNSNumberBridgeFromDouble),
2525
("test_numericBitPatterns_to_floatingPointTypes", test_numericBitPatterns_to_floatingPointTypes),
2626
("testNSNumberBridgeAnyHashable", testNSNumberBridgeAnyHashable),
27+
("testNSNumberToBool", testNSNumberToBool),
2728
]
2829
}
2930

@@ -623,6 +624,37 @@ class TestNSNumberBridging : XCTestCase {
623624
XCTAssertEqual(value, ns_value)
624625
}
625626
}
627+
628+
func testNSNumberToBool() {
629+
let b0 = NSNumber(value: 0) as? Bool
630+
XCTAssertNotNil(b0)
631+
XCTAssertEqual(b0, false)
632+
633+
let b1 = NSNumber(value: false) as? Bool
634+
XCTAssertNotNil(b1)
635+
XCTAssertEqual(b1, false)
636+
637+
let b2 = NSNumber(value: 1) as? Bool
638+
XCTAssertNotNil(b2)
639+
XCTAssertEqual(b2, true)
640+
641+
let b3 = NSNumber(value: true) as? Bool
642+
XCTAssertNotNil(b3)
643+
XCTAssertEqual(b3, true)
644+
645+
XCTAssertNil(NSNumber(value: -1) as? Bool)
646+
XCTAssertNil(NSNumber(value: 2) as? Bool)
647+
XCTAssertNil(NSNumber(value: Int8.min) as? Bool)
648+
XCTAssertNil(NSNumber(value: Int8.max) as? Bool)
649+
XCTAssertNil(NSNumber(value: Int16.min) as? Bool)
650+
XCTAssertNil(NSNumber(value: Int16.max) as? Bool)
651+
XCTAssertNil(NSNumber(value: Int32.min) as? Bool)
652+
XCTAssertNil(NSNumber(value: Int32.max) as? Bool)
653+
XCTAssertNil(NSNumber(value: Int64.min) as? Bool)
654+
XCTAssertNil(NSNumber(value: Int64.max) as? Bool)
655+
XCTAssertNil(NSNumber(value: Int.min) as? Bool)
656+
XCTAssertNil(NSNumber(value: Int.max) as? Bool)
657+
}
626658
}
627659

628660
extension Float {

0 commit comments

Comments
 (0)