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++ cnt++
} }
for (n in (1..5).reversed) for (n in (1..5).reversed())
cnt++ cnt++
return if(cnt == 9) "OK" else cnt.toString() return if(cnt == 9) "OK" else cnt.toString()
+50 -14
View File
@@ -1,23 +1,59 @@
package kotlin package kotlin
public val CharRange.reversed: CharRange public fun CharacterSequence.reversed(): CharacterSequence {
get() = CharRange(end, if (start < end) -size else size) return CharacterSequence(end, start, -increment)
}
public val ByteRange.reversed: ByteRange public fun ByteSequence.reversed(): ByteSequence {
get() = ByteRange(end, if (start < end) -size else size) return ByteSequence(end, start, -increment)
}
public val ShortRange.reversed: ShortRange public fun ShortSequence.reversed(): ShortSequence {
get() = ShortRange(end, if (start < end) -size else size) return ShortSequence(end, start, -increment)
}
public val IntRange.reversed: IntRange public fun IntSequence.reversed(): IntSequence {
get() = IntRange(end, if (start < end) -size else size) return IntSequence(end, start, -increment)
}
public val FloatRange.reversed: FloatRange public fun FloatSequence.reversed(): FloatSequence {
get() = FloatRange(end, if (start < end) -size else size) return FloatSequence(end, start, -increment)
}
public val LongRange.reversed: LongRange public fun LongSequence.reversed(): LongSequence {
get() = LongRange(end, if (start < end) -size else size) 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() { test fun reversedRanges() {
val intRange = 0..9 val intRange = 0..9
val reversedIntRange = intRange.reversed val reversedIntRange = intRange.reversed()
assertEquals(10, reversedIntRange.size) assertEquals(10, reversedIntRange.size)
assertEquals(9, reversedIntRange.start) assertEquals(9, reversedIntRange.start)
assertEquals(0, reversedIntRange.end) assertEquals(0, reversedIntRange.end)
assertEquals(intRange, reversedIntRange.reversed) assertEquals(intRange, reversedIntRange.reversed())
val doubleRange = 0.0..9.0 val doubleRange = 0.0..9.0
val reversedDoubleRange = doubleRange.reversed val reversedDoubleRange = doubleRange.reversed()
assertEquals(9.0, reversedDoubleRange.size) assertEquals(9.0, reversedDoubleRange.size)
assertEquals(9.0, reversedDoubleRange.start) assertEquals(9.0, reversedDoubleRange.start)
assertEquals(0.0, reversedDoubleRange.end) assertEquals(0.0, reversedDoubleRange.end)
assertEquals(doubleRange, reversedDoubleRange.reversed) assertEquals(doubleRange, reversedDoubleRange.reversed())
assertEquals(IntRange.EMPTY, IntRange.EMPTY.reversed) assertEquals(IntRange.EMPTY, IntRange.EMPTY.reversed())
assertEquals(FloatRange.EMPTY, FloatRange.EMPTY.reversed) assertEquals(FloatRange.EMPTY, FloatRange.EMPTY.reversed())
} }
} }