Should these be consistent? 

All crashing or none crashing?

print(abs(Int8.min)) // crash

print(abs(Int16.min)) // crash

print(abs(Int32.min)) // prints -2147483648

print(abs(Int64.min)) // crash

Should this be reported by Radar or another mechanism?

I'm using this as a replacement:

func safeAbs<T: SignedInteger & FixedWidthInteger>(_ i: T) -> T {
    if i >= 0 {
        return i
    } else if i == T.min { // can't negate this value
        // return i   // unconverted, violates postcondition, assert(result >= 
0)
        // return 0   // or return an arbitrary "safe" value
        return -(1+i) // or return approximately the right value
    } else {
        return -i
    }
}

print(safeAbs(Int8.min)) // prints 127 
print(safeAbs(Int16.min)) // prints 32767
print(safeAbs(Int32.min)) // prints 2147483647
print(safeAbs(Int64.min)) // prints 9223372036854775807

_______________________________________________
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users

Reply via email to