Last active
August 29, 2015 14:26
-
-
Save Nadohs/77dbb03707fdaaf036e3 to your computer and use it in GitHub Desktop.
checks if number overflows using ?=
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
func ?= <T:IntNumberConvertible, U:NumberConvertible>(var lhs: T, rhs: U) -> T{ | |
print("INTNUMBER") | |
let max :Double = T.max.convert() | |
let test :Double = rhs.convert() | |
if test > max{ | |
assert(false, "Conversion Loss") | |
} | |
lhs = rhs.convert() | |
let x:T = rhs.convert() | |
return x; | |
} | |
//Test Cases | |
let res555:Int = 0 | |
res555 ?= Int(100000) * Int64(100000) //success | |
res555 ?= Int(1000000000000000000) * Int64(1000000000000000000) //overflow | |
public protocol IntNumberConvertible : NumberConvertible { | |
static var max: Self { get } | |
} | |
extension CGFloat : NumberConvertible {} | |
extension Double : NumberConvertible {} | |
extension Int : IntNumberConvertible {} | |
extension Float : NumberConvertible {} | |
extension UInt8 : IntNumberConvertible {} | |
extension Int8 : IntNumberConvertible {} | |
extension UInt16 : IntNumberConvertible {} | |
extension Int16 : IntNumberConvertible {} | |
extension UInt32 : IntNumberConvertible {} | |
extension Int32 : IntNumberConvertible {} | |
extension UInt64 : IntNumberConvertible {} | |
extension Int64 : IntNumberConvertible {} | |
extension UInt : IntNumberConvertible {} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment