Parcelize: Support unsigned array types

See https://issuetracker.google.com/200774823
This commit is contained in:
Steven Schäfer
2021-09-21 14:47:48 +02:00
committed by Alexander Udalov
parent 2501013012
commit cb46a56815
11 changed files with 490 additions and 2 deletions
@@ -0,0 +1,79 @@
// WITH_RUNTIME
// IGNORE_BACKEND: JVM
@file:JvmName("TestKt")
package test
import kotlinx.parcelize.*
import android.os.Parcel
import android.os.Parcelable
import java.util.Arrays
@Parcelize
data class Test(
val a: UByteArray,
val b: UShortArray,
val c: UIntArray,
val d: ULongArray,
val e: UByteArray?,
val f: UShortArray?,
val g: UIntArray?,
val h: ULongArray?
) : Parcelable {
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (other !is Test) return false
if (!a.contentEquals(other.a)) return false
if (!b.contentEquals(other.b)) return false
if (!c.contentEquals(other.c)) return false
if (!d.contentEquals(other.d)) return false
if (!e.contentEquals(other.e)) return false
if (!f.contentEquals(other.f)) return false
if (!g.contentEquals(other.g)) return false
if (!h.contentEquals(other.h)) return false
return true
}
override fun hashCode(): Int {
return 0
}
}
fun box() = parcelTest { parcel ->
val first = Test(
a = ubyteArrayOf(1U, 2U, 3U),
b = ushortArrayOf(2U, 3U, 4U),
c = uintArrayOf(3U, 4U, 5U),
d = ulongArrayOf(4U, 5U, 6U),
e = ubyteArrayOf(UByte.MAX_VALUE, UByte.MIN_VALUE),
f = ushortArrayOf(UShort.MAX_VALUE, UShort.MIN_VALUE),
g = uintArrayOf(UInt.MAX_VALUE, UInt.MIN_VALUE),
h = ulongArrayOf(ULong.MAX_VALUE, ULong.MIN_VALUE),
)
val second = Test(
a = ubyteArrayOf(),
b = ushortArrayOf(),
c = uintArrayOf(),
d = ulongArrayOf(),
e = null,
f = null,
g = null,
h = null,
)
first.writeToParcel(parcel, 0)
second.writeToParcel(parcel, 0)
val bytes = parcel.marshall()
parcel.unmarshall(bytes, 0, bytes.size)
parcel.setDataPosition(0)
val creator = parcelableCreator<Test>()
val first2 = creator.createFromParcel(parcel)
val second2 = creator.createFromParcel(parcel)
assert(first == first2)
assert(second == second2)
}