//===--- NSNumberBridging.swift - Test bridging through NSNumber ----------===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See https://swift.org/LICENSE.txt for license information
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//
//
// RUN: %empty-directory(%t)
//
// RUN: %target-clang %S/Inputs/FoundationBridge/FoundationBridge.m -c -o %t/FoundationBridgeObjC.o -g
// RUN: %target-build-swift %s -I %S/Inputs/FoundationBridge/ -Xlinker %t/FoundationBridgeObjC.o -o %t/TestNSNumberBridging
// 
// RUN: %target-run %t/TestNSNumberBridging
// REQUIRES: executable_test
// REQUIRES: objc_interop

// FIXME: rdar://35814988
// UNSUPPORTED: CPU=armv7
// UNSUPPORTED: CPU=armv7s
// UNSUPPORTED: CPU=armv7k
// UNSUPPORTED: CPU=arm64

import StdlibUnittest
import Foundation
import CoreGraphics
import FoundationBridgeObjC

var nsNumberBridging = TestSuite("NSNumberBridging")

func testFloat(_ lhs: Float?, _ rhs: Float?, file: String = #file, line: UInt = #line) {
    let message = "\(String(describing: lhs)) != \(String(describing: rhs)) Float"
    if let lhsValue = lhs {
        if let rhsValue = rhs {
            if lhsValue.isNaN != rhsValue.isNaN {
                expectUnreachable(message, file: file, line: line)
            } else if lhsValue != rhsValue && !lhsValue.isNaN {
                expectUnreachable(message, file: file, line: line)
            }
        } else {
            expectUnreachable(message, file: file, line: line)
        }
    } else {
        if rhs != nil {
            expectUnreachable(message, file: file, line: line)
        }
    }
}

func testDouble(_ lhs: Double?, _ rhs: Double?, file: String = #file, line: UInt = #line) {
    let message = "\(String(describing: lhs)) != \(String(describing: rhs)) Double"
    if let lhsValue = lhs {
        if let rhsValue = rhs {
            if lhsValue.isNaN != rhsValue.isNaN {
                expectUnreachable(message, file: file, line: line)
            } else if lhsValue != rhsValue && !lhsValue.isNaN {
                expectUnreachable(message, file: file, line: line)
            }
        } else {
            expectUnreachable(message, file: file, line: line)
        }
    } else {
        if rhs != nil {
            expectUnreachable(message, file: file, line: line)
        }
    }
}


extension Int8 {
    static var _interestingValues: [Int8] {
        return [
            Int8.min,
            Int8.min + 1,
            Int8.max,
            Int8.max - 1,
            0,
            -1, 1,
            -42, 42,
        ]
    }
}

extension UInt8 {
    static var _interestingValues: [UInt8] {
        return [
            UInt8.min,
            UInt8.min + 1,
            UInt8.max,
            UInt8.max - 1,
            42,
        ]
    }
}

extension Int16 {
    static var _interestingValues: [Int16] {
        return [
            Int16.min,
            Int16.min + 1,
            Int16.max,
            Int16.max - 1,
            0,
            -1, 1,
            -42, 42,
        ]
    }
}

extension UInt16 {
    static var _interestingValues: [UInt16] {
        return [
            UInt16.min,
            UInt16.min + 1,
            UInt16.max,
            UInt16.max - 1,
            42,
        ]
    }
}

extension Int32 {
    static var _interestingValues: [Int32] {
        return [
            Int32.min,
            Int32.min + 1,
            Int32.max,
            Int32.max - 1,
            0,
            -1, 1,
            -42, 42,
        ]
    }
}

extension UInt32 {
    static var _interestingValues: [UInt32] {
        return [
            UInt32.min,
            UInt32.min + 1,
            UInt32.max,
            UInt32.max - 1,
            42,
        ]
    }
}

extension Int64 {
    static var _interestingValues: [Int64] {
        return [
            Int64.min,
            Int64.min + 1,
            Int64.max,
            Int64.max - 1,
            0,
            -1, 1,
            -42, 42,
        ]
    }
}

extension UInt64 {
    static var _interestingValues: [UInt64] {
        return [
            UInt64.min,
            UInt64.min + 1,
            UInt64.max,
            UInt64.max - 1,
            42,
        ]
    }
}

extension Int {
    static var _interestingValues: [Int] {
        return [
            Int.min,
            Int.min + 1,
            Int.max,
            Int.max - 1,
            0,
            -1, 1,
            -42, 42,
        ]
    }
}

extension UInt {
    static var _interestingValues: [UInt] {
        return [
            UInt.min,
            UInt.min + 1,
            UInt.max,
            UInt.max - 1,
            42,
        ]
    }
}

extension Float {
    static var _interestingValues: [Float] {
        return [
            -Float.infinity,
            -Float.greatestFiniteMagnitude,
            -1.0,
            -Float.ulpOfOne,
            -Float.leastNormalMagnitude,
            -0.0,
            0.0,
            Float.leastNormalMagnitude,
            Float.ulpOfOne,
            1.0,
            Float.greatestFiniteMagnitude,
            Float.infinity,
            Float.nan,
        ]
    }
}

extension Double {
    static var _interestingValues: [Double] {
        return [
            -Double.infinity,
            -Double.greatestFiniteMagnitude,
            -1.0,
            -Double.ulpOfOne,
            -Double.leastNormalMagnitude,
            -0.0,
            0.0,
            Double.leastNormalMagnitude,
            Double.ulpOfOne,
            1.0,
            Double.greatestFiniteMagnitude,
            Double.infinity,
            Double.nan,
        ]
    }
}

extension CGFloat {
    static var _interestingValues: [CGFloat] {
        return [
            -CGFloat.infinity,
            -CGFloat.greatestFiniteMagnitude,
            -1.0,
            -CGFloat.ulpOfOne,
            -CGFloat.leastNormalMagnitude,
            -0.0,
            0.0,
            CGFloat.leastNormalMagnitude,
            CGFloat.ulpOfOne,
            1.0,
            CGFloat.greatestFiniteMagnitude,
            CGFloat.infinity,
            CGFloat.nan,
        ]
    }
}

extension Bool {
    static var _interestingValues: [Bool] {
        return [false, true]
    }
}

func testNSNumberBridgeFromInt8() {
    for interestingValue in Int8._interestingValues {
        func testNumber(_ number: NSNumber?) {
            expectNotNil(number)
            let int8 = (number!) as? Int8
            expectEqual(Int8(exactly: interestingValue), int8)
            let uint8 = (number!) as? UInt8
            expectEqual(UInt8(exactly: interestingValue), uint8)
            let int16 = (number!) as? Int16
            expectEqual(Int16(exactly: interestingValue), int16)
            let uint16 = (number!) as? UInt16
            expectEqual(UInt16(exactly: interestingValue), uint16)
            let int32 = (number!) as? Int32
            expectEqual(Int32(exactly: interestingValue), int32)
            let uint32 = (number!) as? UInt32
            expectEqual(UInt32(exactly: interestingValue), uint32)
            let int64 = (number!) as? Int64
            expectEqual(Int64(exactly: interestingValue), int64)
            let uint64 = (number!) as? UInt64
            expectEqual(UInt64(exactly: interestingValue), uint64)
            let int = (number!) as? Int
            expectEqual(Int(exactly: interestingValue), int)
            let uint = (number!) as? UInt
            expectEqual(UInt(exactly: interestingValue), uint)
            let float = (number!) as? Float
            expectEqual(Float(interestingValue), float)
        }
        let bridged = interestingValue as NSNumber
        testNumber(bridged)
        let created = NSNumber(value: interestingValue)
        testNumber(created)
    }
}

func testNSNumberBridgeFromUInt8() {
    for interestingValue in UInt8._interestingValues {
        func testNumber(_ number: NSNumber?) {
            expectNotNil(number)
            let int8 = (number!) as? Int8
            expectEqual(Int8(exactly: interestingValue), int8)
            let uint8 = (number!) as? UInt8
            expectEqual(UInt8(exactly: interestingValue), uint8)
            let int16 = (number!) as? Int16
            expectEqual(Int16(exactly: interestingValue), int16)
            let uint16 = (number!) as? UInt16
            expectEqual(UInt16(exactly: interestingValue), uint16)
            let int32 = (number!) as? Int32
            expectEqual(Int32(exactly: interestingValue), int32)
            let uint32 = (number!) as? UInt32
            expectEqual(UInt32(exactly: interestingValue), uint32)
            let int64 = (number!) as? Int64
            expectEqual(Int64(exactly: interestingValue), int64)
            let uint64 = (number!) as? UInt64
            expectEqual(UInt64(exactly: interestingValue), uint64)
            let int = (number!) as? Int
            expectEqual(Int(exactly: interestingValue), int)
            let uint = (number!) as? UInt
            expectEqual(UInt(exactly: interestingValue), uint)
            let float = (number!) as? Float
            expectEqual(Float(interestingValue), float)
        }
        let bridged = interestingValue as NSNumber
        testNumber(bridged)
        let created = NSNumber(value: interestingValue)
        testNumber(created)
    }
}

func testNSNumberBridgeFromInt16() {
    for interestingValue in Int16._interestingValues {
        func testNumber(_ number: NSNumber?) {
            expectNotNil(number)
            let int8 = (number!) as? Int8
            expectEqual(Int8(exactly: interestingValue), int8)
            let uint8 = (number!) as? UInt8
            expectEqual(UInt8(exactly: interestingValue), uint8)
            let int16 = (number!) as? Int16
            expectEqual(Int16(exactly: interestingValue), int16)
            let uint16 = (number!) as? UInt16
            expectEqual(UInt16(exactly: interestingValue), uint16)
            let int32 = (number!) as? Int32
            expectEqual(Int32(exactly: interestingValue), int32)
            let uint32 = (number!) as? UInt32
            expectEqual(UInt32(exactly: interestingValue), uint32)
            let int64 = (number!) as? Int64
            expectEqual(Int64(exactly: interestingValue), int64)
            let uint64 = (number!) as? UInt64
            expectEqual(UInt64(exactly: interestingValue), uint64)
            let int = (number!) as? Int
            expectEqual(Int(exactly: interestingValue), int)
            let uint = (number!) as? UInt
            expectEqual(UInt(exactly: interestingValue), uint)
            let float = (number!) as? Float
            expectEqual(Float(interestingValue), float)
        }
        let bridged = interestingValue as NSNumber
        testNumber(bridged)
        let created = NSNumber(value: interestingValue)
        testNumber(created)
    }
}

func testNSNumberBridgeFromUInt16() {
    for interestingValue in UInt8._interestingValues {
        func testNumber(_ number: NSNumber?) {
            expectNotNil(number)
            let int8 = (number!) as? Int8
            expectEqual(Int8(exactly: interestingValue), int8)
            let uint8 = (number!) as? UInt8
            expectEqual(UInt8(exactly: interestingValue), uint8)
            let int16 = (number!) as? Int16
            expectEqual(Int16(exactly: interestingValue), int16)
            let uint16 = (number!) as? UInt16
            expectEqual(UInt16(exactly: interestingValue), uint16)
            let int32 = (number!) as? Int32
            expectEqual(Int32(exactly: interestingValue), int32)
            let uint32 = (number!) as? UInt32
            expectEqual(UInt32(exactly: interestingValue), uint32)
            let int64 = (number!) as? Int64
            expectEqual(Int64(exactly: interestingValue), int64)
            let uint64 = (number!) as? UInt64
            expectEqual(UInt64(exactly: interestingValue), uint64)
            let int = (number!) as? Int
            expectEqual(Int(exactly: interestingValue), int)
            let uint = (number!) as? UInt
            expectEqual(UInt(exactly: interestingValue), uint)
            let float = (number!) as? Float
            expectEqual(Float(interestingValue), float)
        }
        let bridged = interestingValue as NSNumber
        testNumber(bridged)
        let created = NSNumber(value: interestingValue)
        testNumber(created)
    }
}

func testNSNumberBridgeFromInt32() {
    for interestingValue in Int32._interestingValues {
        func testNumber(_ number: NSNumber?) {
            expectNotNil(number)
            let int8 = (number!) as? Int8
            expectEqual(Int8(exactly: interestingValue), int8)
            let uint8 = (number!) as? UInt8
            expectEqual(UInt8(exactly: interestingValue), uint8)
            let int16 = (number!) as? Int16
            expectEqual(Int16(exactly: interestingValue), int16)
            let uint16 = (number!) as? UInt16
            expectEqual(UInt16(exactly: interestingValue), uint16)
            let int32 = (number!) as? Int32
            expectEqual(Int32(exactly: interestingValue), int32)
            let uint32 = (number!) as? UInt32
            expectEqual(UInt32(exactly: interestingValue), uint32)
            let int64 = (number!) as? Int64
            expectEqual(Int64(exactly: interestingValue), int64)
            let uint64 = (number!) as? UInt64
            expectEqual(UInt64(exactly: interestingValue), uint64)
            let int = (number!) as? Int
            expectEqual(Int(exactly: interestingValue), int)
            let uint = (number!) as? UInt
            expectEqual(UInt(exactly: interestingValue), uint)
            
            let float = (number!) as? Float
            let expectedFloat = Float(exactly: int32!)
            testFloat(expectedFloat, float)
            
            let double = (number!) as? Double
            let expectedDouble = Double(int32!)
            testDouble(expectedDouble, double)
        }
        let bridged = interestingValue as NSNumber
        testNumber(bridged)
        let created = NSNumber(value: interestingValue)
        testNumber(created)
    }
}

func testNSNumberBridgeFromUInt32() {
    for interestingValue in UInt32._interestingValues {
        func testNumber(_ number: NSNumber?) {
            expectNotNil(number)
            let int8 = (number!) as? Int8
            expectEqual(Int8(exactly: interestingValue), int8)
            let uint8 = (number!) as? UInt8
            expectEqual(UInt8(exactly: interestingValue), uint8)
            let int16 = (number!) as? Int16
            expectEqual(Int16(exactly: interestingValue), int16)
            let uint16 = (number!) as? UInt16
            expectEqual(UInt16(exactly: interestingValue), uint16)
            let int32 = (number!) as? Int32
            expectEqual(Int32(exactly: interestingValue), int32)
            let uint32 = (number!) as? UInt32
            expectEqual(UInt32(exactly: interestingValue), uint32)
            let int64 = (number!) as? Int64
            expectEqual(Int64(exactly: interestingValue), int64)
            let uint64 = (number!) as? UInt64
            expectEqual(UInt64(exactly: interestingValue), uint64)
            let int = (number!) as? Int
            expectEqual(Int(exactly: interestingValue), int)
            let uint = (number!) as? UInt
            expectEqual(UInt(exactly: interestingValue), uint)
            
            let float = (number!) as? Float
            let expectedFloat = Float(exactly: uint32!)
            testFloat(expectedFloat, float)
          
            let double = (number!) as? Double
            let expectedDouble = Double(uint32!)
            testDouble(expectedDouble, double)
        }
        let bridged = interestingValue as NSNumber
        testNumber(bridged)
        let created = NSNumber(value: interestingValue)
        testNumber(created)
    }
}

func testNSNumberBridgeFromInt64() {
    for interestingValue in Int64._interestingValues {
        func testNumber(_ number: NSNumber?) {
            expectNotNil(number)
            let int8 = (number!) as? Int8
            expectEqual(Int8(exactly: interestingValue), int8)
            let uint8 = (number!) as? UInt8
            expectEqual(UInt8(exactly: interestingValue), uint8)
            let int16 = (number!) as? Int16
            expectEqual(Int16(exactly: interestingValue), int16)
            let uint16 = (number!) as? UInt16
            expectEqual(UInt16(exactly: interestingValue), uint16)
            let int32 = (number!) as? Int32
            expectEqual(Int32(exactly: interestingValue), int32)
            let uint32 = (number!) as? UInt32
            expectEqual(UInt32(exactly: interestingValue), uint32)
            let int64 = (number!) as? Int64
            expectEqual(Int64(exactly: interestingValue), int64)
            let uint64 = (number!) as? UInt64
            expectEqual(UInt64(exactly: interestingValue), uint64)
            let int = (number!) as? Int
            expectEqual(Int(exactly: interestingValue), int)
            let uint = (number!) as? UInt
            expectEqual(UInt(exactly: interestingValue), uint)
        }
        let bridged = interestingValue as NSNumber
        testNumber(bridged)
        let created = NSNumber(value: interestingValue)
        testNumber(created)
    }
}

func testNSNumberBridgeFromUInt64() {
    for interestingValue in UInt64._interestingValues {
        func testNumber(_ number: NSNumber?) {
            expectNotNil(number)
            let int8 = (number!) as? Int8
            expectEqual(Int8(exactly: interestingValue), int8)
            let uint8 = (number!) as? UInt8
            expectEqual(UInt8(exactly: interestingValue), uint8)
            let int16 = (number!) as? Int16
            expectEqual(Int16(exactly: interestingValue), int16)
            let uint16 = (number!) as? UInt16
            expectEqual(UInt16(exactly: interestingValue), uint16)
            let int32 = (number!) as? Int32
            expectEqual(Int32(exactly: interestingValue), int32)
            let uint32 = (number!) as? UInt32
            expectEqual(UInt32(exactly: interestingValue), uint32)
            let int64 = (number!) as? Int64
            expectEqual(Int64(exactly: interestingValue), int64)
            let uint64 = (number!) as? UInt64
            expectEqual(UInt64(exactly: interestingValue), uint64)
            let int = (number!) as? Int
            expectEqual(Int(exactly: interestingValue), int)
            let uint = (number!) as? UInt
            expectEqual(UInt(exactly: interestingValue), uint)
        }
        let bridged = interestingValue as NSNumber
        testNumber(bridged)
        let created = NSNumber(value: interestingValue)
        testNumber(created)
    }
}

func testNSNumberBridgeFromInt() {
    for interestingValue in Int._interestingValues {
        func testNumber(_ number: NSNumber?) {
            expectNotNil(number)
            let int8 = (number!) as? Int8
            expectEqual(Int8(exactly: interestingValue), int8)
            let uint8 = (number!) as? UInt8
            expectEqual(UInt8(exactly: interestingValue), uint8)
            let int16 = (number!) as? Int16
            expectEqual(Int16(exactly: interestingValue), int16)
            let uint16 = (number!) as? UInt16
            expectEqual(UInt16(exactly: interestingValue), uint16)
            let int32 = (number!) as? Int32
            expectEqual(Int32(exactly: interestingValue), int32)
            let uint32 = (number!) as? UInt32
            expectEqual(UInt32(exactly: interestingValue), uint32)
            let int64 = (number!) as? Int64
            expectEqual(Int64(exactly: interestingValue), int64)
            let uint64 = (number!) as? UInt64
            expectEqual(UInt64(exactly: interestingValue), uint64)
            let int = (number!) as? Int
            expectEqual(Int(exactly: interestingValue), int)
            let uint = (number!) as? UInt
            expectEqual(UInt(exactly: interestingValue), uint)
        }
        let bridged = interestingValue as NSNumber
        testNumber(bridged)
        let created = NSNumber(value: interestingValue)
        testNumber(created)
    }
}

func testNSNumberBridgeFromUInt() {
    for interestingValue in UInt._interestingValues {
        func testNumber(_ number: NSNumber?) {
            expectNotNil(number)
            let int8 = (number!) as? Int8
            expectEqual(Int8(exactly: interestingValue), int8)
            let uint8 = (number!) as? UInt8
            expectEqual(UInt8(exactly: interestingValue), uint8)
            let int16 = (number!) as? Int16
            expectEqual(Int16(exactly: interestingValue), int16)
            let uint16 = (number!) as? UInt16
            expectEqual(UInt16(exactly: interestingValue), uint16)
            let int32 = (number!) as? Int32
            expectEqual(Int32(exactly: interestingValue), int32)
            let uint32 = (number!) as? UInt32
            expectEqual(UInt32(exactly: interestingValue), uint32)
            let int64 = (number!) as? Int64
            expectEqual(Int64(exactly: interestingValue), int64)
            let uint64 = (number!) as? UInt64
            expectEqual(UInt64(exactly: interestingValue), uint64)
            let int = (number!) as? Int
            expectEqual(Int(exactly: interestingValue), int)
            let uint = (number!) as? UInt
            expectEqual(UInt(exactly: interestingValue), uint)

            let float = (number!) as? Float
            let expectedFloat = Float(exactly: uint!)
            if UInt.bitWidth == 32 && uint! >= UInt.max - 1 {
              expectNil(expectedFloat)
            } else {
              testFloat(expectedFloat, float)
            }
          
            let double = (number!) as? Double
            let expectedDouble = Double(exactly: uint!)
            testDouble(expectedDouble, double)
        }
        let bridged = interestingValue as NSNumber
        testNumber(bridged)
        let created = NSNumber(value: interestingValue)
        testNumber(created)
    }
}

func testNSNumberBridgeFromFloat() {
    for interestingValue in Float._interestingValues {
        func testNumber(_ number: NSNumber?) {
            expectNotNil(number)
            let int8 = (number!) as? Int8
            expectEqual(Int8(exactly: interestingValue), int8)
            let uint8 = (number!) as? UInt8
            expectEqual(UInt8(exactly: interestingValue), uint8)
            let int16 = (number!) as? Int16
            expectEqual(Int16(exactly: interestingValue), int16)
            let uint16 = (number!) as? UInt16
            expectEqual(UInt16(exactly: interestingValue), uint16)
            let int32 = (number!) as? Int32
            expectEqual(Int32(exactly: interestingValue), int32)
            let uint32 = (number!) as? UInt32
            expectEqual(UInt32(exactly: interestingValue), uint32)
            let int64 = (number!) as? Int64
            expectEqual(Int64(exactly: interestingValue), int64)
            let uint64 = (number!) as? UInt64
            expectEqual(UInt64(exactly: interestingValue), uint64)
            let int = (number!) as? Int
            expectEqual(Int(exactly: interestingValue), int)
            let uint = (number!) as? UInt
            expectEqual(UInt(exactly: interestingValue), uint)

            let float = (number!) as? Float
            let expectedFloat = Float(exactly: interestingValue)
            if interestingValue.isNaN {
                expectTrue(float?.isNaN == true)
                expectNil(expectedFloat)
            } else {
                testFloat(expectedFloat, float)
            }
            
            let double = (number!) as? Double
            let expectedDouble = Double(exactly: interestingValue)
            if interestingValue.isNaN {
                expectTrue(double?.isNaN == true)
                expectNil(expectedDouble)
            } else {
                testDouble(expectedDouble, double)
            }
        }
        let bridged = interestingValue as NSNumber
        testNumber(bridged)
        let created = NSNumber(value: interestingValue)
        testNumber(created)
    }
}

func testNSNumberBridgeFromDouble() {
    for interestingValue in Double._interestingValues {
        func testNumber(_ number: NSNumber?) {
            expectNotNil(number)
            let int8 = (number!) as? Int8
            expectEqual(Int8(exactly: interestingValue), int8)
            let uint8 = (number!) as? UInt8
            expectEqual(UInt8(exactly: interestingValue), uint8)
            let int16 = (number!) as? Int16
            expectEqual(Int16(exactly: interestingValue), int16)
            let uint16 = (number!) as? UInt16
            expectEqual(UInt16(exactly: interestingValue), uint16)
            let int32 = (number!) as? Int32
            expectEqual(Int32(exactly: interestingValue), int32)
            let uint32 = (number!) as? UInt32
            expectEqual(UInt32(exactly: interestingValue), uint32)
            let int64 = (number!) as? Int64
            expectEqual(Int64(exactly: interestingValue), int64)
            let uint64 = (number!) as? UInt64
            expectEqual(UInt64(exactly: interestingValue), uint64)
            let int = (number!) as? Int
            expectEqual(Int(exactly: interestingValue), int)
            let uint = (number!) as? UInt
            expectEqual(UInt(exactly: interestingValue), uint)

            let float = (number!) as? Float
            let expectedFloat = Float(exactly: interestingValue)
            if interestingValue.isNaN {
                expectTrue(float?.isNaN == true)
                expectNil(expectedFloat)
            } else {
                testFloat(expectedFloat, float)
            }
            
            let double = (number!) as? Double
            let expectedDouble = Double(exactly: interestingValue)
            if interestingValue.isNaN {
                expectTrue(double?.isNaN == true)
                expectNil(expectedDouble)
            } else {
                testDouble(expectedDouble, double)
            }
        }
        let bridged = interestingValue as NSNumber
        testNumber(bridged)
        let created = NSNumber(value: interestingValue)
        testNumber(created)
    }
}

func testNSNumberBridgeFromCGFloat() {
    for interestingValue in CGFloat._interestingValues {
        func testNumber(_ number: NSNumber?) {
            expectNotNil(number)
            let int8 = (number!) as? Int8
            expectEqual(Int8(exactly: interestingValue.native), int8)
            let uint8 = (number!) as? UInt8
            expectEqual(UInt8(exactly: interestingValue.native), uint8)
            let int16 = (number!) as? Int16
            expectEqual(Int16(exactly: interestingValue.native), int16)
            let uint16 = (number!) as? UInt16
            expectEqual(UInt16(exactly: interestingValue.native), uint16)
            let int32 = (number!) as? Int32
            expectEqual(Int32(exactly: interestingValue.native), int32)
            let uint32 = (number!) as? UInt32
            expectEqual(UInt32(exactly: interestingValue.native), uint32)
            let int64 = (number!) as? Int64
            expectEqual(Int64(exactly: interestingValue.native), int64)
            let uint64 = (number!) as? UInt64
            expectEqual(UInt64(exactly: interestingValue.native), uint64)
            let int = (number!) as? Int
            expectEqual(Int(exactly: interestingValue.native), int)
            let uint = (number!) as? UInt
            expectEqual(UInt(exactly: interestingValue.native), uint)
            
            let float = (number!) as? Float
            let expectedFloat = Float(exactly: interestingValue.native)
            if interestingValue.isNaN {
                expectTrue(float?.isNaN == true)
                expectNil(expectedFloat)
            } else {
                testFloat(expectedFloat, float)
            }
            
            let double = (number!) as? Double
            let expectedDouble = Double(exactly: interestingValue.native)
            if interestingValue.isNaN {
                expectTrue(double?.isNaN == true)
                expectNil(expectedDouble)
            } else {
                testDouble(expectedDouble, double)
            }
        }
        let bridged = interestingValue as NSNumber
        testNumber(bridged)
        let created = NSNumber(value: interestingValue.native)
        testNumber(created)
    }
}

func test_numericBitPatterns_to_floatingPointTypes() {
    let signed_numbers: [NSNumber] = [
        NSNumber(value: Int64(6)),
        NSNumber(value: Int64(bitPattern: 1 << 56)),
        NSNumber(value: Int64(bitPattern: 1 << 53)),
        NSNumber(value: Int64(bitPattern: 1 << 52)),
        NSNumber(value: Int64(bitPattern: 1 << 25)),
        NSNumber(value: Int64(bitPattern: 1 << 24)),
        NSNumber(value: Int64(bitPattern: 1 << 23)),
        NSNumber(value: -Int64(bitPattern: 1 << 53)),
        NSNumber(value: -Int64(bitPattern: 1 << 52)),
        NSNumber(value: -Int64(6)),
        NSNumber(value: -Int64(bitPattern: 1 << 56)),
        NSNumber(value: -Int64(bitPattern: 1 << 25)),
        NSNumber(value: -Int64(bitPattern: 1 << 24)),
        NSNumber(value: -Int64(bitPattern: 1 << 23)),
    ]

    let signed_values: [Int64] = [
        Int64(6),
        Int64(bitPattern: 1 << 56),
        Int64(bitPattern: 1 << 53),
        Int64(bitPattern: 1 << 52),
        Int64(bitPattern: 1 << 25),
        Int64(bitPattern: 1 << 24),
        Int64(bitPattern: 1 << 23),
        -Int64(bitPattern: 1 << 53),
        -Int64(bitPattern: 1 << 52),
        -Int64(6),
        -Int64(bitPattern: 1 << 56),
        -Int64(bitPattern: 1 << 25),
        -Int64(bitPattern: 1 << 24),
        -Int64(bitPattern: 1 << 23),
    ]

    let unsigned_numbers: [NSNumber] = [
        NSNumber(value: UInt64(bitPattern: 6)),
        NSNumber(value: UInt64(bitPattern: 1 << 56)),
        NSNumber(value: UInt64(bitPattern: 1 << 63)),
        NSNumber(value: UInt64(bitPattern: 1 << 53)),
        NSNumber(value: UInt64(bitPattern: 1 << 52)),
        NSNumber(value: UInt64(bitPattern: 1 << 25)),
        NSNumber(value: UInt64(bitPattern: 1 << 24)),
        NSNumber(value: UInt64(bitPattern: 1 << 23)),
    ]

    let unsigned_values: [UInt64] = [
        UInt64(bitPattern: 6),
        UInt64(bitPattern: 1 << 56),
        UInt64(bitPattern: 1 << 63),
        UInt64(bitPattern: 1 << 53),
        UInt64(bitPattern: 1 << 52),
        UInt64(bitPattern: 1 << 25),
        UInt64(bitPattern: 1 << 24),
        UInt64(bitPattern: 1 << 23)
    ]

    for (number, value) in zip(signed_numbers, signed_values) {
        let numberCast = Double(exactly: number)
        let valueCast = Double(exactly: value)
        expectEqual(numberCast, valueCast)
    }

    for (number, value) in zip(unsigned_numbers, unsigned_values) {
        let numberCast = Double(exactly: number)
        let valueCast = Double(exactly: value)
        expectEqual(numberCast, valueCast)
    }

    for (number, value) in zip(signed_numbers, signed_values) {
        let numberCast = Float(exactly: number)
        let valueCast = Float(exactly: value)
        expectEqual(numberCast, valueCast)
    }

    for (number, value) in zip(unsigned_numbers, unsigned_values) {
        let numberCast = Float(exactly: number)
        let valueCast = Float(exactly: value)
        expectEqual(numberCast, valueCast)
    }
}

func testNSNumberBridgeAnyHashable() {
    var dict = [AnyHashable : Any]()
    for i in -Int(UInt8.min) ... Int(UInt8.max) {
        dict[i] = "\(i)"
    }

    // When bridging a dictionary to NSDictionary, we should be able to access
    // the keys through either an Int (the original type boxed in AnyHashable)
    // or NSNumber (the type Int bridged to).
    let ns_dict = dict as NSDictionary
    for i in -Int(UInt8.min) ... Int(UInt8.max) {
        guard let value = ns_dict[i] as? String else {
            expectUnreachable("Unable to look up value by Int key.")
            continue
        }

        guard let ns_value = ns_dict[NSNumber(value: i)] as? String else {
            expectUnreachable("Unable to look up value by NSNumber key.")
            continue
        }
        
        expectEqual(value, ns_value)
    }
}

func testNSNumberBridgeAnyHashableObjc() {
    let range = -Int(UInt8.min) ... Int(UInt8.max)
    var dict = [AnyHashable : Any]()
    for i in range {
        dict[i] = "\(i)"
    }

    let verifier = NumberBridgingTester()
    expectTrue(verifier.verifyKeys(in: NSRange(range), existIn: dict))
}

nsNumberBridging.test("Bridge Int8") { testNSNumberBridgeFromInt8() }
nsNumberBridging.test("Bridge UInt8") { testNSNumberBridgeFromUInt8() }
nsNumberBridging.test("Bridge Int16") { testNSNumberBridgeFromInt16() }
nsNumberBridging.test("Bridge UInt16") { testNSNumberBridgeFromUInt16() }
nsNumberBridging.test("Bridge Int32") { testNSNumberBridgeFromInt32() }
nsNumberBridging.test("Bridge UInt32") { testNSNumberBridgeFromUInt32() }
nsNumberBridging.test("Bridge Int64") { testNSNumberBridgeFromInt64() }
nsNumberBridging.test("Bridge UInt64") { testNSNumberBridgeFromUInt64() }
nsNumberBridging.test("Bridge Int") { testNSNumberBridgeFromInt() }
nsNumberBridging.test("Bridge UInt") { testNSNumberBridgeFromUInt() }
nsNumberBridging.test("Bridge Float") { testNSNumberBridgeFromFloat() }
nsNumberBridging.test("Bridge Double") { testNSNumberBridgeFromDouble() }
nsNumberBridging.test("Bridge CGFloat") { testNSNumberBridgeFromCGFloat() }
nsNumberBridging.test("bitPattern to exactly") { test_numericBitPatterns_to_floatingPointTypes() }
nsNumberBridging.test("Bridge AnyHashable") { testNSNumberBridgeAnyHashable() }
nsNumberBridging.test("Bridge AnyHashable (ObjC)") { testNSNumberBridgeAnyHashableObjc() }
runAllTests()
