
com.wesleyhome.test.jupiter.provider.FloatValueSourceDataProvider.kt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of junit-jupiter-params-generated Show documentation
Show all versions of junit-jupiter-params-generated Show documentation
Library to help generate test parameter permutations for parameterized tests in JUnit.
This version is an initial attempt to convert to building with Gradle.
package com.wesleyhome.test.jupiter.provider
import com.wesleyhome.test.jupiter.annotations.FloatRangeSource
import com.wesleyhome.test.jupiter.annotations.FloatSource
import java.util.concurrent.atomic.AtomicReference
object FloatValueSourceDataProvider : AbstractParameterDataProvider() {
override fun providesDataFor(testParameter: TestParameter): Boolean {
return super.providesDataFor(testParameter) && findAnnotation(testParameter) != null
}
override fun createParameterOptionsData(testParameter: TestParameter): List {
return findAnnotation(testParameter)!!.values.toList()
}
private fun findAnnotation(testParameter: TestParameter) =
testParameter.annotations.firstOrNull { it is FloatSource }.let { annotation ->
if (annotation == null) {
null
} else {
annotation as FloatSource
}
}
}
object FloatRangeDataProvider : AbstractParameterDataProvider() {
override fun providesDataFor(testParameter: TestParameter): Boolean {
return super.providesDataFor(testParameter) && findAnnotation(testParameter) != null
}
override fun createParameterOptionsData(testParameter: TestParameter): List {
val s = findAnnotation(testParameter)!!
if (s.increment <= 0) {
throw IllegalArgumentException("increment must be greater than 0")
}
if (s.min >= s.max) {
throw IllegalArgumentException("min must be less than or equal to max")
}
val range = (s.min..s.max step s.increment).toList()
return if (s.ascending) {
range
} else {
range.reversed()
}
}
private fun findAnnotation(testParameter: TestParameter) =
testParameter.annotations.firstOrNull { it is FloatRangeSource }.let { annotation ->
if (annotation == null) {
null
} else {
annotation as FloatRangeSource
}
}
}
class FloatProgression(
private val min: Float,
private val max: Float,
private val step: Float
) : Iterable {
private val range: ClosedFloatingPointRange = min..max
private val current = AtomicReference(min)
override fun iterator(): Iterator {
return object : Iterator {
override fun hasNext(): Boolean = range.contains(current.get())
override fun next(): Float {
return current.getAndUpdate { it + step }
}
}
}
}
infix fun ClosedFloatingPointRange.step(step: Float): FloatProgression {
return FloatProgression(this.start, this.endInclusive, step)
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy