Add tests for UInt, ULong

Opt-in to use unsigned types in tests
This commit is contained in:
Ilya Gorbunov
2018-07-18 14:40:19 +03:00
parent fb62507e51
commit fa2f1311d7
9 changed files with 230 additions and 5 deletions
+8
View File
@@ -71,6 +71,14 @@ compileCoroutinesKotlinCommon {
}
}
compileTestKotlinCommon {
kotlinOptions {
freeCompilerArgs += [
"-Xuse-experimental=kotlin.ExperimentalUnsignedTypes"
]
}
}
kotlin.experimental.coroutines 'enable'
jar {
+1 -1
View File
@@ -70,7 +70,7 @@ compileKotlin {
}
compileTestKotlin {
kotlinOptions.freeCompilerArgs = ["-Xallow-kotlin-package", "-Xmulti-platform", "-XXLanguage:-ReleaseCoroutines"]
kotlinOptions.freeCompilerArgs = ["-Xallow-kotlin-package", "-Xmulti-platform", "-XXLanguage:-ReleaseCoroutines", "-Xuse-experimental=kotlin.ExperimentalUnsignedTypes"]
}
compileJava9Sources(project, 'kotlin.stdlib.jdk7')
+1 -1
View File
@@ -73,7 +73,7 @@ compileKotlin {
}
compileTestKotlin {
kotlinOptions.freeCompilerArgs = ["-Xallow-kotlin-package", "-Xmulti-platform", "-XXLanguage:-ReleaseCoroutines"]
kotlinOptions.freeCompilerArgs = ["-Xallow-kotlin-package", "-Xmulti-platform", "-XXLanguage:-ReleaseCoroutines", "-Xuse-experimental=kotlin.ExperimentalUnsignedTypes"]
}
compileJava9Sources(project, 'kotlin.stdlib.jdk8')
+1 -1
View File
@@ -63,7 +63,7 @@ compileKotlin {
}
compileTestKotlin {
kotlinOptions.freeCompilerArgs = ["-Xallow-kotlin-package", "-Xmulti-platform", "-XXLanguage:-ReleaseCoroutines"]
kotlinOptions.freeCompilerArgs = ["-Xallow-kotlin-package", "-Xmulti-platform", "-XXLanguage:-ReleaseCoroutines", "-Xuse-experimental=kotlin.ExperimentalUnsignedTypes"]
}
kotlin.experimental.coroutines 'enable'
+1 -1
View File
@@ -66,7 +66,7 @@ compileKotlin {
}
compileTestKotlin {
kotlinOptions.freeCompilerArgs = ["-Xallow-kotlin-package", "-Xnormalize-constructor-calls=enable", "-Xmulti-platform", "-XXLanguage:-ReleaseCoroutines"]
kotlinOptions.freeCompilerArgs = ["-Xallow-kotlin-package", "-Xnormalize-constructor-calls=enable", "-Xmulti-platform", "-XXLanguage:-ReleaseCoroutines", "-Xuse-experimental=kotlin.ExperimentalUnsignedTypes"]
}
kotlin.experimental.coroutines 'enable'
+2 -1
View File
@@ -181,7 +181,8 @@ compileTestKotlin2Js {
kotlinOptions {
moduleKind = "umd"
freeCompilerArgs += [
"-XXLanguage:-ReleaseCoroutines"
"-XXLanguage:-ReleaseCoroutines",
"-Xuse-experimental=kotlin.ExperimentalUnsignedTypes"
]
}
}
+8
View File
@@ -253,4 +253,12 @@ compileUnsignedKotlin {
}
}
compileTestKotlin {
kotlinOptions {
freeCompilerArgs += [
"-Xuse-experimental=kotlin.ExperimentalUnsignedTypes"
]
}
}
kotlin.experimental.coroutines 'enable'
+104
View File
@@ -0,0 +1,104 @@
/*
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* that can be found in the license/LICENSE.txt file.
*/
package test.unsigned
import kotlin.math.sign
import kotlin.random.Random
import kotlin.test.*
class UIntTest {
private fun identity(u: UInt): UInt =
(u.toInt() + 0).toUInt()
val zero = 0u
val one = 1u
val max = UInt.MAX_VALUE
@Test
fun equality() {
fun testEqual(uv1: UInt, uv2: UInt) {
assertEquals(uv1, uv2, "Boxed values should be equal")
assertTrue(uv1.equals(uv2), "Boxed values should be equal: $uv1, $uv2")
assertTrue(uv1 == uv2, "Values should be equal: $uv1, $uv2")
assertEquals(uv1.hashCode(), uv2.hashCode())
assertEquals((uv1 as Any).hashCode(), (uv2 as Any).hashCode())
assertEquals(uv1.toString(), uv2.toString())
assertEquals((uv1 as Any).toString(), (uv2 as Any).toString())
}
testEqual(one, identity(one))
testEqual(max, identity(max))
fun testNotEqual(uv1: UInt, uv2: UInt) {
assertNotEquals(uv1, uv2, "Boxed values should be equal")
assertTrue(uv1 != uv2, "Values should be not equal: $uv1, $uv2")
assertNotEquals(uv1.toString(), uv2.toString())
assertNotEquals((uv1 as Any).toString(), (uv2 as Any).toString())
}
testNotEqual(one, zero)
testNotEqual(max, zero)
}
@Test
fun convertToString() {
fun testToString(expected: String, u: UInt) {
assertEquals(expected, u.toString())
assertEquals(expected, (u as Any).toString(), "Boxed toString")
assertEquals(expected, "$u", "String template")
}
repeat(100) {
val v = Random.nextBits(UInt.SIZE_BITS - 1)
testToString(v.toString(), v.toUInt())
}
repeat(100) {
val v = Random.nextInt(294967295 + 1)
testToString("4${v.toString().padStart(9, '0')}", (2_000_000_000.toUInt() * 2.toUInt() + v.toUInt()))
}
testToString("4294967295", UInt.MAX_VALUE)
}
@Test
fun comparisons() {
fun <T> compare(op1: Comparable<T>, op2: T) = op1.compareTo(op2)
fun testComparison(uv1: UInt, uv2: UInt, expected: Int) {
val desc = "${uv1.toString()}, ${uv2.toString()}"
assertEquals(expected, uv1.compareTo(uv2).sign, "compareTo: $desc")
assertEquals(expected, (uv1 as Comparable<UInt>).compareTo(uv2).sign, "Comparable.compareTo: $desc")
assertEquals(expected, compare(uv1, uv2).sign, "Generic compareTo: $desc")
assertEquals(expected < 0, uv1 < uv2)
assertEquals(expected <= 0, uv1 <= uv2)
assertEquals(expected > 0, uv1 > uv2)
assertEquals(expected >= 0, uv1 >= uv2)
}
fun testEquals(uv1: UInt, uv2: UInt) = testComparison(uv1, uv2, 0)
fun testCompare(uv1: UInt, uv2: UInt, expected12: Int) {
testComparison(uv1, uv2, expected12)
testComparison(uv2, uv1, -expected12)
}
testEquals(one, identity(one))
testEquals(max, identity(max))
testCompare(zero, one, -1)
testCompare(Int.MAX_VALUE.toUInt(), zero, 1)
testCompare(zero, UInt.MAX_VALUE, -1)
testCompare((Int.MAX_VALUE).toUInt() + one, UInt.MAX_VALUE, -1)
}
}
+104
View File
@@ -0,0 +1,104 @@
/*
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* that can be found in the license/LICENSE.txt file.
*/
package test.unsigned
import kotlin.math.sign
import kotlin.random.Random
import kotlin.test.*
class ULongTest {
private fun identity(u: ULong): ULong =
(u.toLong() + 0).toULong()
val zero = 0uL
val one = 1uL
val max = ULong.MAX_VALUE
@Test
fun equality() {
fun testEqual(uv1: ULong, uv2: ULong) {
assertEquals(uv1, uv2, "Boxed values should be equal")
assertTrue(uv1.equals(uv2), "Boxed values should be equal: $uv1, $uv2")
assertTrue(uv1 == uv2, "Values should be equal: $uv1, $uv2")
assertEquals(uv1.hashCode(), uv2.hashCode())
assertEquals((uv1 as Any).hashCode(), (uv2 as Any).hashCode())
assertEquals(uv1.toString(), uv2.toString())
assertEquals((uv1 as Any).toString(), (uv2 as Any).toString())
}
testEqual(one, identity(one))
testEqual(max, identity(max))
fun testNotEqual(uv1: ULong, uv2: ULong) {
assertNotEquals(uv1, uv2, "Boxed values should be equal")
assertTrue(uv1 != uv2, "Values should be not equal: $uv1, $uv2")
assertNotEquals(uv1.toString(), uv2.toString())
assertNotEquals((uv1 as Any).toString(), (uv2 as Any).toString())
}
testNotEqual(one, zero)
testNotEqual(max, zero)
}
@Test
fun convertToString() {
fun testToString(expected: String, u: ULong) {
assertEquals(expected, u.toString())
assertEquals(expected, (u as Any).toString(), "Boxed toString")
assertEquals(expected, "$u", "String template")
}
repeat(100) {
val v = Random.nextLong() ushr 1
testToString(v.toString(), v.toULong())
}
repeat(100) {
val v = Random.nextLong(8446744073709551615L + 1)
testToString("1${v.toString().padStart(19, '0')}", (5000000000000000000.toULong() * 2.toULong() + v.toULong()))
}
testToString("18446744073709551615", ULong.MAX_VALUE)
}
@Test
fun comparisons() {
fun <T> compare(op1: Comparable<T>, op2: T) = op1.compareTo(op2)
fun testComparison(uv1: ULong, uv2: ULong, expected: Int) {
val desc = "${uv1.toString()}, ${uv2.toString()}"
assertEquals(expected, uv1.compareTo(uv2).sign, "compareTo: $desc")
assertEquals(expected, (uv1 as Comparable<ULong>).compareTo(uv2).sign, "Comparable.compareTo: $desc")
assertEquals(expected, compare(uv1, uv2).sign, "Generic compareTo: $desc")
assertEquals(expected < 0, uv1 < uv2)
assertEquals(expected <= 0, uv1 <= uv2)
assertEquals(expected > 0, uv1 > uv2)
assertEquals(expected >= 0, uv1 >= uv2)
}
fun testEquals(uv1: ULong, uv2: ULong) = testComparison(uv1, uv2, 0)
fun testCompare(uv1: ULong, uv2: ULong, expected12: Int) {
testComparison(uv1, uv2, expected12)
testComparison(uv2, uv1, -expected12)
}
testEquals(one, identity(one))
testEquals(max, identity(max))
testCompare(zero, one, -1)
testCompare(Long.MAX_VALUE.toULong(), zero, 1)
testCompare(zero, ULong.MAX_VALUE, -1)
testCompare((Long.MAX_VALUE).toULong() + one, ULong.MAX_VALUE, -1)
}
}