object FoldTest {
def timeIt(n:Int, f:()=> Unit):Unit = {
val now = System.currentTimeMillis();
0.to(n-1).foreach((x) => f());
println((System.currentTimeMillis() - now) / 1000.0);
}
def sum1(xs:Array[Int]):Int = {
var result = 0
var i = 0
while (i < xs.length) {
result += xs(i);
i += 1;
}
result;
}
def sum2(xs:Array[Int]):Int = {
var result = 0;
for (i <- 0.to(xs.length-1)) result += xs(i);
result;
}
def sum3(xs:Array[Int]):Int = {
var result = 0;
for (x <- xs) result += x;
result;
}
def sum4(xs:Array[Int]):Int = {
xs.foldLeft(0)((x, y) => x + y);
}
def main(args:Array[String]): Unit = {
var xs = new Array[Int](1000);
0.to(999).copyToArray(xs);
timeIt(10000, ()=>sum1(xs));
timeIt(10000, ()=>sum2(xs));
timeIt(10000, ()=>sum3(xs));
timeIt(10000, ()=>sum4(xs));
}
}