diff --git a/libraries/stdlib/src/kotlin/Ranges.kt b/libraries/stdlib/src/kotlin/Ranges.kt index 948195fd32a..114899252ab 100644 --- a/libraries/stdlib/src/kotlin/Ranges.kt +++ b/libraries/stdlib/src/kotlin/Ranges.kt @@ -1,5 +1,24 @@ package kotlin +public data class ComparableRange> ( + public override val start: T, + public override val end: T +): Range { + public override fun contains(item: T): Boolean { + return start <= item && item <= end + } + + public fun toString(): String { + return "$start..$end" + } +} + +public fun > T.rangeTo(that: T): ComparableRange { + return ComparableRange(this, that) +} + + + public fun CharacterSequence.reversed(): CharacterSequence { return CharacterSequence(end, start, -increment) } diff --git a/libraries/stdlib/test/language/RangeTest.kt b/libraries/stdlib/test/language/RangeTest.kt index ca1d8d8ffa1..7b4b5275bce 100644 --- a/libraries/stdlib/test/language/RangeTest.kt +++ b/libraries/stdlib/test/language/RangeTest.kt @@ -35,4 +35,17 @@ class RangeTest { assertEquals(0.0, reversedDoubleRange.end) assertEquals(doubleRange.toList(), reversedDoubleRange.reversed().toList()) } + + test fun comparableRange() { + val range1 = "island".."isle" + assertTrue("island" in range1) + assertTrue("isle" in range1) + assertTrue("islandic" in range1) + + assertFalse("apple" in range1) + assertFalse("icicle" in range1) + + assertFalse("item" in range1) + assertFalse("trail" in range1) + } } \ No newline at end of file