blob: ea29db3217a346d3ef6cd0769566753892618dd6 [file] [log] [blame]
// Copyright 2016 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
import XCTest
@testable import Syncbase
class NSNumberTests: XCTestCase {
func testISNSNumber() {
XCTAssertTrue(NSNumber.isNSNumber(NSNumber(bool: true)))
XCTAssertFalse(NSNumber.isNSNumber(true))
XCTAssertTrue(NSNumber.isNSNumber(true as AnyObject))
XCTAssertTrue(NSNumber.isNSNumber(true as NSNumber))
XCTAssertFalse(NSNumber.isNSNumber(""))
XCTAssertFalse(NSNumber.isNSNumber(5))
XCTAssertTrue(NSNumber.isNSNumber(5 as AnyObject))
}
func testConservationOfPrecision() {
var anyobj:AnyObject?
var nsnumber:NSNumber?
var bool:Bool? = true
var int:Int? = Int.max
var int8:Int8? = Int8.max
var int16:Int16? = Int16.max
var int32:Int32? = Int32.max
var int64:Int64? = Int64.max
var float:Float? = Float(Int32.max)
var double:Double? = Double(Int64.max)
var long:CLong? = CLong.max
var uint:UInt? = UInt.max
var uint8:UInt8? = UInt8.max
var uint16:UInt16? = UInt16.max
var uint32:UInt32? = UInt32.max
var uint64:UInt64? = UInt64.max
var ulong:CUnsignedLong? = CUnsignedLong.max
// Preserve booleans
XCTAssertTrue((true as NSNumber).isTargetCastable(&bool))
XCTAssertTrue((true as NSNumber).isTargetCastable(&anyobj))
XCTAssertTrue((true as NSNumber).isTargetCastable(&nsnumber))
XCTAssertFalse((true as NSNumber).isTargetCastable(&int))
XCTAssertFalse((true as NSNumber).isTargetCastable(&float))
XCTAssertFalse((true as NSNumber).isTargetCastable(&long))
// Preserved size
XCTAssertTrue(NSNumber(char: int8!).isTargetCastable(&int8))
XCTAssertTrue(NSNumber(char: int8!).isTargetCastable(&int16))
XCTAssertTrue(NSNumber(char: int8!).isTargetCastable(&int32))
XCTAssertTrue(NSNumber(char: int8!).isTargetCastable(&int64))
XCTAssertTrue(NSNumber(char: int8!).isTargetCastable(&int))
XCTAssertTrue(NSNumber(char: int8!).isTargetCastable(&long))
XCTAssertFalse(NSNumber(char: int8!).isTargetCastable(&float))
XCTAssertFalse(NSNumber(char: int8!).isTargetCastable(&double))
XCTAssertFalse(NSNumber(short: int16!).isTargetCastable(&int8))
XCTAssertTrue(NSNumber(short: int16!).isTargetCastable(&int16))
XCTAssertTrue(NSNumber(short: int16!).isTargetCastable(&int32))
XCTAssertTrue(NSNumber(short: int16!).isTargetCastable(&int64))
XCTAssertTrue(NSNumber(short: int16!).isTargetCastable(&int))
XCTAssertTrue(NSNumber(short: int16!).isTargetCastable(&long))
XCTAssertFalse(NSNumber(short: int16!).isTargetCastable(&float))
XCTAssertFalse(NSNumber(short: int16!).isTargetCastable(&double))
XCTAssertFalse(NSNumber(int: int32!).isTargetCastable(&int8))
XCTAssertFalse(NSNumber(int: int32!).isTargetCastable(&int16))
XCTAssertTrue(NSNumber(int: int32!).isTargetCastable(&int32))
XCTAssertTrue(NSNumber(int: int32!).isTargetCastable(&int64))
XCTAssertTrue(NSNumber(int: int32!).isTargetCastable(&int))
XCTAssertTrue(NSNumber(int: int32!).isTargetCastable(&uint))
XCTAssertTrue(NSNumber(int: int32!).isTargetCastable(&long))
XCTAssertFalse(NSNumber(int: int32!).isTargetCastable(&float))
XCTAssertFalse(NSNumber(int: int32!).isTargetCastable(&double))
if sizeof(CLong) == sizeof(Int64) {
XCTAssertFalse(NSNumber(long: int!).isTargetCastable(&int8))
XCTAssertFalse(NSNumber(long: int!).isTargetCastable(&int16))
XCTAssertFalse(NSNumber(long: int!).isTargetCastable(&int32))
XCTAssertTrue(NSNumber(long: int!).isTargetCastable(&int64))
XCTAssertTrue(NSNumber(long: int!).isTargetCastable(&long))
XCTAssertTrue(NSNumber(long: int!).isTargetCastable(&int))
XCTAssertTrue(NSNumber(long: int!).isTargetCastable(&uint))
XCTAssertFalse(NSNumber(long: int!).isTargetCastable(&float))
XCTAssertFalse(NSNumber(long: int!).isTargetCastable(&double))
} else {
XCTAssertFalse(NSNumber(long: int!).isTargetCastable(&int8))
XCTAssertFalse(NSNumber(long: int!).isTargetCastable(&int16))
XCTAssertTrue(NSNumber(long: int!).isTargetCastable(&int32))
XCTAssertTrue(NSNumber(long: int!).isTargetCastable(&int64))
XCTAssertTrue(NSNumber(long: int!).isTargetCastable(&long))
XCTAssertFalse(NSNumber(long: int!).isTargetCastable(&float))
XCTAssertFalse(NSNumber(long: int!).isTargetCastable(&double))
}
XCTAssertFalse(NSNumber(longLong: int64!).isTargetCastable(&int8))
XCTAssertFalse(NSNumber(longLong: int64!).isTargetCastable(&int16))
XCTAssertFalse(NSNumber(longLong: int64!).isTargetCastable(&int32))
if sizeof(Int) == sizeof(Int64) {
XCTAssertTrue(NSNumber(longLong: int64!).isTargetCastable(&int))
} else {
XCTAssertFalse(NSNumber(longLong: int64!).isTargetCastable(&int))
}
XCTAssertTrue(NSNumber(longLong: int64!).isTargetCastable(&int64))
XCTAssertTrue(NSNumber(longLong: int64!).isTargetCastable(&long))
XCTAssertFalse(NSNumber(longLong: int64!).isTargetCastable(&float))
XCTAssertFalse(NSNumber(longLong: int64!).isTargetCastable(&double))
XCTAssertFalse(NSNumber(unsignedLongLong: uint64!).isTargetCastable(&int8))
XCTAssertFalse(NSNumber(unsignedLongLong: uint64!).isTargetCastable(&int16))
XCTAssertFalse(NSNumber(unsignedLongLong: uint64!).isTargetCastable(&int32))
XCTAssertFalse(NSNumber(unsignedLongLong: uint64!).isTargetCastable(&uint8))
XCTAssertFalse(NSNumber(unsignedLongLong: uint64!).isTargetCastable(&uint16))
XCTAssertFalse(NSNumber(unsignedLongLong: uint64!).isTargetCastable(&uint32))
XCTAssertTrue(NSNumber(unsignedLongLong: uint64!).isTargetCastable(&uint64))
XCTAssertTrue(NSNumber(unsignedLongLong: uint64!).isTargetCastable(&ulong))
// TODO(zinman): Be smarter about when we allow this or not
if sizeof(Int) == sizeof(Int64) {
XCTAssertTrue(NSNumber(unsignedLongLong: uint64!).isTargetCastable(&int))
} else {
XCTAssertFalse(NSNumber(unsignedLongLong: uint64!).isTargetCastable(&int))
}
XCTAssertTrue(NSNumber(unsignedLongLong: uint64!).isTargetCastable(&int64))
XCTAssertTrue(NSNumber(unsignedLongLong: uint64!).isTargetCastable(&long))
XCTAssertFalse(NSNumber(unsignedLongLong: uint64!).isTargetCastable(&float))
XCTAssertFalse(NSNumber(unsignedLongLong: uint64!).isTargetCastable(&double))
XCTAssertFalse(NSNumber(float: float!).isTargetCastable(&int8))
XCTAssertFalse(NSNumber(float: float!).isTargetCastable(&int16))
XCTAssertFalse(NSNumber(float: float!).isTargetCastable(&int32))
XCTAssertFalse(NSNumber(float: float!).isTargetCastable(&int64))
XCTAssertFalse(NSNumber(float: float!).isTargetCastable(&int))
XCTAssertFalse(NSNumber(float: float!).isTargetCastable(&long))
XCTAssertTrue(NSNumber(float: float!).isTargetCastable(&float))
XCTAssertTrue(NSNumber(float: float!).isTargetCastable(&double))
XCTAssertFalse(NSNumber(double: double!).isTargetCastable(&int8))
XCTAssertFalse(NSNumber(double: double!).isTargetCastable(&int16))
XCTAssertFalse(NSNumber(double: double!).isTargetCastable(&int32))
XCTAssertFalse(NSNumber(double: double!).isTargetCastable(&int64))
XCTAssertFalse(NSNumber(double: double!).isTargetCastable(&long))
XCTAssertFalse(NSNumber(double: double!).isTargetCastable(&float))
XCTAssertTrue(NSNumber(double: double!).isTargetCastable(&double))
}
}