Last active
August 29, 2015 14:06
-
-
Save trylks/2e121adc1eb5679f5925 to your computer and use it in GitHub Desktop.
Tests for some ways to implement summation in Scala. Something to consider.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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