Skip to content

Instantly share code, notes, and snippets.

@trylks
Last active August 29, 2015 14:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save trylks/2e121adc1eb5679f5925 to your computer and use it in GitHub Desktop.
Save trylks/2e121adc1eb5679f5925 to your computer and use it in GitHub Desktop.
Tests for some ways to implement summation in Scala. Something to consider.
package main
import scala.language.implicitConversions
object SomeTests {
implicit def traversableToFolder[A](traversable: Traversable[A]) = new Folder[A](traversable)
class Folder[A](val list: Traversable[A]) {
def foldFor[B](start: B)(op: ((B, A) => B)): B = {
var ret = start
for (v <- list)
ret = op(ret, v)
return ret
}
}
def main(args: Array[String]): Unit = {
print("sum: \t")
val prev1 = System.currentTimeMillis()
val s1 = (1 to 100000000).sum
println((System.currentTimeMillis() - prev1))
print("par sum:\t")
val prev2 = System.currentTimeMillis()
val s2 = (1 to 100000000).par.sum
println((System.currentTimeMillis() - prev2))
print("fold: \t")
val prev3 = System.currentTimeMillis()
val s3 = (1 to 100000000).fold(0)(_ + _)
println((System.currentTimeMillis() - prev3))
print("par fold:\t")
val prev4 = System.currentTimeMillis()
val s4 = (1 to 100000000).par.fold(0)(_ + _)
println((System.currentTimeMillis() - prev4))
print("foldleft:\t")
val prev5 = System.currentTimeMillis()
val s5 = (1 to 100000000).foldLeft(0)(_ + _)
println((System.currentTimeMillis() - prev5))
print("par foldleft:\t")
val prev6 = System.currentTimeMillis()
val s6 = (1 to 100000000).par.foldLeft(0)(_ + _)
println((System.currentTimeMillis() - prev6))
print("fold for:\t")
val prev7 = System.currentTimeMillis()
val s7 = (1 to 100000000).foldFor(0)(_ + _)
println((System.currentTimeMillis() - prev7))
/*
Don't even bother
print("foldright:\t")
val prev8 = System.currentTimeMillis()
val s8 = (1 to 100000000).foldRight(0)(_ + _)
println((System.currentTimeMillis() - prev8))
print("par foldright:\t")
val prev9 = System.currentTimeMillis()
val s9 = (1 to 100000000).par.foldRight(0)(_ + _)
println((System.currentTimeMillis() - prev9))
*/
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment