@@ -853,6 +853,19 @@ class TestNSNumber : XCTestCase {
853
853
XCTAssertEqual ( NSNumber ( value: Float ( 1 ) ) . doubleValue, Double ( 1 ) )
854
854
XCTAssertEqual ( NSNumber ( value: Float ( - 37.5 ) ) . doubleValue, Double ( - 37.5 ) )
855
855
XCTAssertEqual ( NSNumber ( value: Float ( 42.5 ) ) . doubleValue, Double ( 42.5 ) )
856
+
857
+ let nanFloat = NSNumber ( value: Float . nan)
858
+ XCTAssertTrue ( nanFloat. doubleValue. isNaN)
859
+ XCTAssertEqual ( nanFloat. intValue, Int ( bitPattern: 1 << 63 ) )
860
+ XCTAssertEqual ( nanFloat. uintValue, UInt ( bitPattern: 1 << 63 ) )
861
+ XCTAssertEqual ( nanFloat. int8Value, 0 )
862
+ XCTAssertEqual ( nanFloat. uint8Value, 0 )
863
+ XCTAssertEqual ( nanFloat. int16Value, 0 )
864
+ XCTAssertEqual ( nanFloat. uint16Value, 0 )
865
+ XCTAssertEqual ( nanFloat. int32Value, 0 )
866
+ XCTAssertEqual ( nanFloat. uint32Value, 0 )
867
+ XCTAssertEqual ( nanFloat. int64Value, Int64 ( bitPattern: 1 << 63 ) )
868
+ XCTAssertEqual ( nanFloat. uint64Value, UInt64 ( bitPattern: 1 << 63 ) )
856
869
}
857
870
858
871
func test_numberWithDouble( ) {
@@ -885,6 +898,20 @@ class TestNSNumber : XCTestCase {
885
898
XCTAssertEqual ( NSNumber ( value: Double ( 0 ) ) . doubleValue, Double ( 0 ) )
886
899
XCTAssertEqual ( NSNumber ( value: Double ( - 37.5 ) ) . doubleValue, Double ( - 37.5 ) )
887
900
XCTAssertEqual ( NSNumber ( value: Double ( 42.1 ) ) . doubleValue, Double ( 42.1 ) )
901
+
902
+ let nanDouble = NSNumber ( value: Double . nan)
903
+ XCTAssertTrue ( nanDouble. floatValue. isNaN)
904
+ XCTAssertEqual ( nanDouble. intValue, Int ( bitPattern: 1 << 63 ) )
905
+ XCTAssertEqual ( nanDouble. uintValue, UInt ( bitPattern: 1 << 63 ) )
906
+ XCTAssertEqual ( nanDouble. int8Value, 0 )
907
+ XCTAssertEqual ( nanDouble. uint8Value, 0 )
908
+ XCTAssertEqual ( nanDouble. int16Value, 0 )
909
+ XCTAssertEqual ( nanDouble. uint16Value, 0 )
910
+ XCTAssertEqual ( nanDouble. int32Value, 0 )
911
+ XCTAssertEqual ( nanDouble. uint32Value, 0 )
912
+ XCTAssertEqual ( nanDouble. int64Value, Int64 ( bitPattern: 1 << 63 ) )
913
+ XCTAssertEqual ( nanDouble. uint64Value, UInt64 ( bitPattern: 1 << 63 ) )
914
+
888
915
}
889
916
890
917
func test_compareNumberWithBool( ) {
@@ -1351,23 +1378,55 @@ class TestNSNumber : XCTestCase {
1351
1378
let num = NSNumber ( value: Int8 . min)
1352
1379
XCTAssertFalse ( num == NSNumber ( value: num. uint64Value) )
1353
1380
1354
- let num1 = NSNumber ( value: Float . nan)
1355
- XCTAssertEqual ( num1. compare ( num1) , . orderedSame)
1381
+ let zero = NSNumber ( value: 0 )
1382
+ let one = NSNumber ( value: 1 )
1383
+ let minusOne = NSNumber ( value: - 1 )
1384
+ let intMin = NSNumber ( value: Int . min)
1385
+ let intMax = NSNumber ( value: Int . max)
1386
+
1387
+ let nanFloat = NSNumber ( value: Float . nan)
1388
+ XCTAssertEqual ( nanFloat. compare ( nanFloat) , . orderedSame)
1389
+
1390
+ XCTAssertFalse ( nanFloat == zero)
1391
+ XCTAssertFalse ( zero == nanFloat)
1392
+ XCTAssertEqual ( nanFloat. compare ( zero) , . orderedAscending)
1393
+ XCTAssertEqual ( zero. compare ( nanFloat) , . orderedDescending)
1394
+
1395
+ XCTAssertEqual ( nanFloat. compare ( one) , . orderedAscending)
1396
+ XCTAssertEqual ( one. compare ( nanFloat) , . orderedDescending)
1397
+
1398
+ XCTAssertEqual ( nanFloat. compare ( intMax) , . orderedAscending)
1399
+ XCTAssertEqual ( intMax. compare ( nanFloat) , . orderedDescending)
1400
+
1401
+ XCTAssertEqual ( nanFloat. compare ( minusOne) , . orderedDescending)
1402
+ XCTAssertEqual ( minusOne. compare ( nanFloat) , . orderedAscending)
1403
+
1404
+ XCTAssertEqual ( nanFloat. compare ( intMin) , . orderedDescending)
1405
+ XCTAssertEqual ( intMin. compare ( nanFloat) , . orderedAscending)
1406
+
1407
+
1408
+ let nanDouble = NSNumber ( value: Double . nan)
1409
+ XCTAssertEqual ( nanDouble. compare ( nanDouble) , . orderedSame)
1410
+
1411
+ XCTAssertFalse ( nanDouble == zero)
1412
+ XCTAssertFalse ( zero == nanDouble)
1413
+ XCTAssertEqual ( nanDouble. compare ( zero) , . orderedAscending)
1414
+ XCTAssertEqual ( zero. compare ( nanDouble) , . orderedDescending)
1415
+
1416
+ XCTAssertEqual ( nanDouble. compare ( one) , . orderedAscending)
1417
+ XCTAssertEqual ( one. compare ( nanDouble) , . orderedDescending)
1418
+
1419
+ XCTAssertEqual ( nanDouble. compare ( intMax) , . orderedAscending)
1420
+ XCTAssertEqual ( intMax. compare ( nanDouble) , . orderedDescending)
1356
1421
1357
- let num2 = NSNumber ( value: num1. uint8Value) // 0
1358
- XCTAssertFalse ( num1 == num2)
1359
- XCTAssertFalse ( num2 == num1)
1360
- XCTAssertEqual ( num1. compare ( num2) , . orderedAscending)
1361
- XCTAssertEqual ( num2. compare ( num1) , . orderedDescending)
1422
+ XCTAssertEqual ( nanDouble. compare ( minusOne) , . orderedDescending)
1423
+ XCTAssertEqual ( minusOne. compare ( nanDouble) , . orderedAscending)
1362
1424
1363
- let num3 = NSNumber ( value : Double . nan )
1364
- XCTAssertEqual ( num3 . compare ( num3 ) , . orderedSame )
1425
+ XCTAssertEqual ( nanDouble . compare ( intMin ) , . orderedDescending )
1426
+ XCTAssertEqual ( intMin . compare ( nanDouble ) , . orderedAscending )
1365
1427
1366
- let num4 = NSNumber ( value: num3. intValue) // 0
1367
- XCTAssertFalse ( num3 == num2)
1368
- XCTAssertFalse ( num4 == num3)
1369
- XCTAssertEqual ( num3. compare ( num4) , . orderedAscending)
1370
- XCTAssertEqual ( num4. compare ( num3) , . orderedDescending)
1428
+ XCTAssertEqual ( nanDouble, nanFloat)
1429
+ XCTAssertEqual ( nanFloat, nanDouble)
1371
1430
1372
1431
XCTAssertEqual ( NSNumber ( value: Double . leastNonzeroMagnitude) . compare ( NSNumber ( value: 0 ) ) , . orderedDescending)
1373
1432
XCTAssertEqual ( NSNumber ( value: Double . greatestFiniteMagnitude) . compare ( NSNumber ( value: 0 ) ) , . orderedDescending)
0 commit comments