Add missing sum() on Streams.

This commit is contained in:
Ilya Ryzhenkov
2014-12-15 18:11:29 +03:00
parent f7d4ca092c
commit 846014b37f
3 changed files with 50 additions and 0 deletions
@@ -19,6 +19,18 @@ public fun Iterable<Int>.sum(): Int {
return sum
}
/**
* Returns the sum of all elements in the collection
*/
public fun Stream<Int>.sum(): Int {
val iterator = iterator()
var sum: Int = 0
while (iterator.hasNext()) {
sum += iterator.next()
}
return sum
}
/**
* Returns the sum of all elements in the collection
*/
@@ -31,6 +43,18 @@ public fun Iterable<Long>.sum(): Long {
return sum
}
/**
* Returns the sum of all elements in the collection
*/
public fun Stream<Long>.sum(): Long {
val iterator = iterator()
var sum: Long = 0
while (iterator.hasNext()) {
sum += iterator.next()
}
return sum
}
/**
* Returns the sum of all elements in the collection
*/
@@ -43,6 +67,18 @@ public fun Iterable<Double>.sum(): Double {
return sum
}
/**
* Returns the sum of all elements in the collection
*/
public fun Stream<Double>.sum(): Double {
val iterator = iterator()
var sum: Double = 0.0
while (iterator.hasNext()) {
sum += iterator.next()
}
return sum
}
/**
* Returns the sum of all elements in the collection
*/
@@ -55,6 +91,18 @@ public fun Iterable<Float>.sum(): Float {
return sum
}
/**
* Returns the sum of all elements in the collection
*/
public fun Stream<Float>.sum(): Float {
val iterator = iterator()
var sum: Float = 0.0f
while (iterator.hasNext()) {
sum += iterator.next()
}
return sum
}
/**
* Returns the sum of all elements in the collection
*/
@@ -435,6 +435,7 @@ class CollectionTest {
expect(3.0) { arrayListOf(1.0, 2.0).sum() }
expect(3000000000000) { arrayListOf<Long>(1000000000000, 2000000000000).sum() }
expect(3.0.toFloat()) { arrayListOf<Float>(1.0.toFloat(), 2.0.toFloat()).sum() }
expect(3.0.toFloat()) { streamOf<Float>(1.0.toFloat(), 2.0.toFloat()).sum() }
}
test fun takeReturnsFirstNElements() {
@@ -25,6 +25,7 @@ fun generateCollectionsAPI(outDir: File) {
// TODO: decide if sum for byte and short is needed and how to make it work
for (numeric in listOf(Int, Long, /*Byte, Short, */ Double, Float)) {
build(builder, Iterables, numeric)
build(builder, Streams, numeric)
}
for (numeric in listOf(Int, Long, Byte, Short, Double, Float)) {