BAEL-2760
This commit is contained in:
parent
266864a56b
commit
6ab2e7a71a
|
@ -0,0 +1,56 @@
|
||||||
|
package com.baeldung.range
|
||||||
|
|
||||||
|
import java.lang.IllegalStateException
|
||||||
|
|
||||||
|
class CustomColor(val rgb: Int): Comparable<CustomColor> {
|
||||||
|
|
||||||
|
override fun compareTo(other: CustomColor): Int {
|
||||||
|
return this.rgb.compareTo(other.rgb)
|
||||||
|
}
|
||||||
|
|
||||||
|
operator fun rangeTo(that: CustomColor) = ColorRange(this,that)
|
||||||
|
|
||||||
|
operator fun inc(): CustomColor {
|
||||||
|
return CustomColor(rgb + 1)
|
||||||
|
}
|
||||||
|
|
||||||
|
init {
|
||||||
|
if(rgb < 0x000000 || rgb > 0xFFFFFF){
|
||||||
|
throw IllegalStateException("RGB must be between 0 and 16777215")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun toString(): String {
|
||||||
|
return "CustomColor(rgb=$rgb)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
class ColorRange(override val start: CustomColor,
|
||||||
|
override val endInclusive: CustomColor) : ClosedRange<CustomColor>, Iterable<CustomColor>{
|
||||||
|
|
||||||
|
override fun iterator(): Iterator<CustomColor> {
|
||||||
|
return ColorIterator(start, endInclusive)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class ColorIterator(val start: CustomColor, val endInclusive: CustomColor) : Iterator<CustomColor> {
|
||||||
|
|
||||||
|
var initValue = start
|
||||||
|
|
||||||
|
override fun hasNext(): Boolean {
|
||||||
|
return initValue <= endInclusive
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun next(): CustomColor {
|
||||||
|
return initValue++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun main(args: Array<String>) {
|
||||||
|
val a = CustomColor(0xABCDEF)
|
||||||
|
val b = CustomColor(-1)
|
||||||
|
val c = CustomColor(0xABCDFF)
|
||||||
|
|
||||||
|
for(color in a..c){
|
||||||
|
println(color)
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,41 @@
|
||||||
|
package com.baeldung.range
|
||||||
|
|
||||||
|
import org.junit.Test
|
||||||
|
import java.lang.IllegalStateException
|
||||||
|
import kotlin.test.assertFailsWith
|
||||||
|
import kotlin.test.assertTrue
|
||||||
|
|
||||||
|
class CustomColorTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testInvalidConstructor(){
|
||||||
|
assertFailsWith(IllegalStateException::class){
|
||||||
|
CustomColor(-1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun assertHas10Colors(){
|
||||||
|
assertTrue {
|
||||||
|
val a = CustomColor(1)
|
||||||
|
val b = CustomColor(10)
|
||||||
|
val range = a..b
|
||||||
|
for(cc in range){
|
||||||
|
println(cc)
|
||||||
|
}
|
||||||
|
range.toList().size == 10
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun assertContains0xCCCCCC(){
|
||||||
|
assertTrue {
|
||||||
|
val a = CustomColor(0xBBBBBB)
|
||||||
|
val b = CustomColor(0xDDDDDD)
|
||||||
|
val range = a..b
|
||||||
|
range.contains(CustomColor(0xCCCCCC))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue