Description
Reported by Russell Melick. [edit1: I don't think this affects correctness of
the places that use the abs utility since we just need it to return a
consistent positive value, but we should fix this nonetheless]
[edit 2: actually it affects correctness in places that depend on consistent
values across the fix. e.g., the offset manager is determined based on
abs(hash(consumer group)). So after an upgrade that can change]
/** * Get the absolute value of the given number. If the number is Int.MinValue return 0. * This is different from java.lang.Math.abs or scala.math.abs in that they return Int.MinValue (!). */ def abs(n: Int) = n & 0x7fffffff
For negative integers, it does not return the absolute value. It does
appear to do what the comment says for Int.MinValue though. For example,
scala> -1 & 0x7fffffff res8: Int = 2147483647 scala> -2 & 0x7fffffff res9: Int = 2147483646 scala> -2147483647 & 0x7fffffff res11: Int = 1 scala> -2147483648 & 0x7fffffff res12: Int = 0