Fixed RMI short/int packing for negative numbers
This commit is contained in:
parent
d2caea6645
commit
da5264c542
|
@ -427,16 +427,15 @@ object RmiUtils {
|
|||
return allClasses
|
||||
}
|
||||
|
||||
private const val RIGHT = 0xFFFF
|
||||
fun packShorts(left: Int, right: Int): Int {
|
||||
return left shl 16 or (right and RIGHT)
|
||||
return left shl 16 or (right and 0xFFFF)
|
||||
}
|
||||
|
||||
fun unpackLeft(packedInt: Int): Int {
|
||||
return packedInt ushr 16 // >>> operator 0-fills from left
|
||||
return packedInt shr 16
|
||||
}
|
||||
|
||||
}
|
||||
fun unpackRight(packedInt: Int): Int {
|
||||
return packedInt and RIGHT
|
||||
return packedInt.toShort().toInt()
|
||||
}
|
||||
}
|
||||
|
|
40
test/dorkboxTest/network/rmi/RmiPackIdTest.kt
Normal file
40
test/dorkboxTest/network/rmi/RmiPackIdTest.kt
Normal file
|
@ -0,0 +1,40 @@
|
|||
package dorkboxTest.network.rmi
|
||||
|
||||
import dorkbox.network.rmi.RmiUtils
|
||||
import org.junit.Assert
|
||||
import org.junit.Test
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
class RmiPackIdTest {
|
||||
@Test
|
||||
fun rmiObjectIdNegative() {
|
||||
// these are SHORTS, so SHORT.MIN -> SHORT.MAX, excluding 0
|
||||
for (rmiObjectId in Short.MIN_VALUE..-1) {
|
||||
for (rmiId in 1..Short.MAX_VALUE) {
|
||||
val packed = RmiUtils.packShorts(rmiObjectId, rmiId)
|
||||
val rmiObjectId2 = RmiUtils.unpackLeft(packed)
|
||||
val rmiId2 = RmiUtils.unpackRight(packed)
|
||||
|
||||
Assert.assertEquals(rmiObjectId, rmiObjectId2)
|
||||
Assert.assertEquals(rmiId, rmiId2)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun rmiIdNegative() {
|
||||
// these are SHORTS, so SHORT.MIN -> SHORT.MAX, excluding 0
|
||||
for (rmiId in Short.MIN_VALUE..-1) {
|
||||
for (rmiObjectId in 1..Short.MAX_VALUE) {
|
||||
val packed = RmiUtils.packShorts(rmiObjectId, rmiId)
|
||||
val rmiObjectId2 = RmiUtils.unpackLeft(packed)
|
||||
val rmiId2 = RmiUtils.unpackRight(packed)
|
||||
|
||||
Assert.assertEquals(rmiObjectId, rmiObjectId2)
|
||||
Assert.assertEquals(rmiId, rmiId2)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user