Fix internal KotlinVersion representation that caused invalid comparison
This commit is contained in:
@@ -21,7 +21,7 @@ public class KotlinVersion(val major: Int, val minor: Int, val patch: Int) : Com
|
|||||||
require(major in 0..MAX_COMPONENT_VALUE && minor in 0..MAX_COMPONENT_VALUE && patch in 0..MAX_COMPONENT_VALUE) {
|
require(major in 0..MAX_COMPONENT_VALUE && minor in 0..MAX_COMPONENT_VALUE && patch in 0..MAX_COMPONENT_VALUE) {
|
||||||
"Version components are out of range: $major.$minor.$patch"
|
"Version components are out of range: $major.$minor.$patch"
|
||||||
}
|
}
|
||||||
return major shl 16 + minor shl 8 + patch
|
return major.shl(16) + minor.shl(8) + patch
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -33,5 +33,40 @@ class KotlinVersionTest {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test fun versionComparison() {
|
||||||
|
val v100 = KotlinVersion(1, 0, 0)
|
||||||
|
val v107 = KotlinVersion(1, 0, 7)
|
||||||
|
val v110 = KotlinVersion(1, 1, 0)
|
||||||
|
val v114 = KotlinVersion(1, 1, 4)
|
||||||
|
val v115 = KotlinVersion(1, 1, 50)
|
||||||
|
val v120 = KotlinVersion(1, 2, 0)
|
||||||
|
val v122 = KotlinVersion(1, 2, 20)
|
||||||
|
val v2 = KotlinVersion(2, 0, 0)
|
||||||
|
|
||||||
|
val sorted = listOf(v100, v107, v110, v114, v115, v120, v122, v2)
|
||||||
|
for ((prev, next) in sorted.zip(sorted.drop(1))) { // use zipWithNext in 1.2
|
||||||
|
val message = "next: $next, prev: $prev"
|
||||||
|
assertTrue(next > prev, message)
|
||||||
|
assertTrue(next.isAtLeast(prev.major, prev.minor, prev.patch), message)
|
||||||
|
assertTrue(next.isAtLeast(prev.major, prev.minor), message)
|
||||||
|
assertTrue(next.isAtLeast(next.major, next.minor, next.patch), message)
|
||||||
|
assertTrue(next.isAtLeast(next.major, next.minor), message)
|
||||||
|
assertFalse(prev.isAtLeast(next.major, next.minor, next.patch), message)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@JvmVersion // until there's random in JS
|
||||||
|
@Test fun randomVersionComparison() {
|
||||||
|
val random = java.util.Random()
|
||||||
|
fun randomComponent(): Int = random.nextInt(KotlinVersion.MAX_COMPONENT_VALUE + 1)
|
||||||
|
fun randomVersion() = KotlinVersion(randomComponent(), randomComponent(), randomComponent())
|
||||||
|
repeat(10000) {
|
||||||
|
val v1 = randomVersion()
|
||||||
|
val v2 = randomVersion()
|
||||||
|
if (v1.isAtLeast(v2.major, v2.minor, v2.patch))
|
||||||
|
assertTrue(v1 >= v2, "Expected version $v1 >= $v2")
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user