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
|
return allClasses
|
||||||
}
|
}
|
||||||
|
|
||||||
private const val RIGHT = 0xFFFF
|
|
||||||
fun packShorts(left: Int, right: Int): Int {
|
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 {
|
fun unpackLeft(packedInt: Int): Int {
|
||||||
return packedInt ushr 16 // >>> operator 0-fills from left
|
return packedInt shr 16
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun unpackRight(packedInt: Int): Int {
|
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