Implemented reversed() in proper way.

- converted it into function
- return sequence values
- implemented for sequences as well
This commit is contained in:
Evgeny Gerashchenko
2013-01-23 14:28:31 +04:00
parent 0051cb9553
commit 9b866b2e12
3 changed files with 57 additions and 21 deletions
@@ -4,7 +4,7 @@ fun box() : String {
cnt++
}
for (n in (1..5).reversed)
for (n in (1..5).reversed())
cnt++
return if(cnt == 9) "OK" else cnt.toString()
+50 -14
View File
@@ -1,23 +1,59 @@
package kotlin
public val CharRange.reversed: CharRange
get() = CharRange(end, if (start < end) -size else size)
public fun CharacterSequence.reversed(): CharacterSequence {
return CharacterSequence(end, start, -increment)
}
public val ByteRange.reversed: ByteRange
get() = ByteRange(end, if (start < end) -size else size)
public fun ByteSequence.reversed(): ByteSequence {
return ByteSequence(end, start, -increment)
}
public val ShortRange.reversed: ShortRange
get() = ShortRange(end, if (start < end) -size else size)
public fun ShortSequence.reversed(): ShortSequence {
return ShortSequence(end, start, -increment)
}
public val IntRange.reversed: IntRange
get() = IntRange(end, if (start < end) -size else size)
public fun IntSequence.reversed(): IntSequence {
return IntSequence(end, start, -increment)
}
public val FloatRange.reversed: FloatRange
get() = FloatRange(end, if (start < end) -size else size)
public fun FloatSequence.reversed(): FloatSequence {
return FloatSequence(end, start, -increment)
}
public val LongRange.reversed: LongRange
get() = LongRange(end, if (start < end) -size else size)
public fun LongSequence.reversed(): LongSequence {
return LongSequence(end, start, -increment)
}
public fun DoubleSequence.reversed(): DoubleSequence {
return DoubleSequence(end, start, -increment)
}
public val DoubleRange.reversed: DoubleRange
get() = DoubleRange(end, if (start < end) -size else size)
public fun CharRange.reversed(): CharacterSequence {
return CharacterSequence(end, start, -1)
}
public fun ByteRange.reversed(): ByteSequence {
return ByteSequence(end, start, -1)
}
public fun ShortRange.reversed(): ShortSequence {
return ShortSequence(end, start, -1)
}
public fun IntRange.reversed(): IntSequence {
return IntSequence(end, start, -1)
}
public fun FloatRange.reversed(): FloatSequence {
return FloatSequence(end, start, -1.0.toFloat())
}
public fun LongRange.reversed(): LongSequence {
return LongSequence(end, start, -1.toLong())
}
public fun DoubleRange.reversed(): DoubleSequence {
return DoubleSequence(end, start, -1.0)
}
+6 -6
View File
@@ -26,20 +26,20 @@ class RangeTest {
test fun reversedRanges() {
val intRange = 0..9
val reversedIntRange = intRange.reversed
val reversedIntRange = intRange.reversed()
assertEquals(10, reversedIntRange.size)
assertEquals(9, reversedIntRange.start)
assertEquals(0, reversedIntRange.end)
assertEquals(intRange, reversedIntRange.reversed)
assertEquals(intRange, reversedIntRange.reversed())
val doubleRange = 0.0..9.0
val reversedDoubleRange = doubleRange.reversed
val reversedDoubleRange = doubleRange.reversed()
assertEquals(9.0, reversedDoubleRange.size)
assertEquals(9.0, reversedDoubleRange.start)
assertEquals(0.0, reversedDoubleRange.end)
assertEquals(doubleRange, reversedDoubleRange.reversed)
assertEquals(doubleRange, reversedDoubleRange.reversed())
assertEquals(IntRange.EMPTY, IntRange.EMPTY.reversed)
assertEquals(FloatRange.EMPTY, FloatRange.EMPTY.reversed)
assertEquals(IntRange.EMPTY, IntRange.EMPTY.reversed())
assertEquals(FloatRange.EMPTY, FloatRange.EMPTY.reversed())
}
}