Array Benchmark

Code to Run

 def test(collectionSize: Int) {
   println("\"Array (size " + collectionSize + "), test results:\"\n")

   import scalqa.Stream.Enable._

   class Foo(val id: Int) { def even = id % 2 == 0 }
   class Bar(val foo: Foo)

   val array: Array[Bar] = (1 to collectionSize).map(i => new Bar(new Foo(i))).toArray

   scalqa.Util.Benchmark(
     ("Array          ", () => array    .filter(_.foo.even).flatMap(_ => array).map(_.foo).count(_.even)),
     ("Array as Stream", () => array.all.filter(_.foo.even).flatMap(_ => array).map(_.foo).count(_.even)))
}

Results to Expect

"Array (size 10), test results:"

Num Name            Ops/Sec %   Memory %   Control Value Avg
--- --------------- ------- --- ------ --- -----------------
1   Array           1.0m    83  1.2k   100 25
2   Array as Stream 1.2m    100 356    28  25

"Array (size 100), test results:"

Num Name            Ops/Sec %   Memory %   Control Value Avg
--- --------------- ------- --- ------ --- -----------------
1   Array           18.6k   98  101.6k 100 2500
2   Array as Stream 18.9k   100 2.7k   2   2500

"Array (size 1000), test results:"

Num Name            Ops/Sec %   Memory %   Control Value Avg
--- --------------- ------- --- ------ --- -----------------
1   Array           164     78  7.3m   100 250000
2   Array as Stream 210     100 41.9k  0   250000

Specialized Test

Code to Run

def specializedTest(collectionSize: Int) {
  println("\"Array (size " + collectionSize + "), specialized test results:\"\n")

  import scalqa.Stream.Enable._

  val array: Array[Int] = (1 to collectionSize).toArray

  scalqa.Util.Benchmark(
    ("Array          ", () => array    .filter(_ % 2 == 0).flatMap(_ => array).map(_ / 2L).sum),
    ("Array as Stream", () => array.all.filter(_ % 2 == 0).flatMap(_ => array).map(_ / 2L).sum))
}

Results to Expect

"Array (size 10), specialized test results:"

Num Name            Ops/Sec %   Memory %   Control Value Avg
--- --------------- ------- --- ------ --- -----------------
1   Array           339.9k  16  0      0   125
2   Array as Stream 2.1m    100 394    100 125

"Array (size 100), specialized test results:"

Num Name            Ops/Sec %   Memory %   Control Value Avg
--- --------------- ------- --- ------ --- -----------------
1   Array           3.8k    8   152.9k 100 125000
2   Array as Stream 45.6k   100 2.1k   1   125000

"Array (size 1000), specialized test results:"

Num Name            Ops/Sec %   Memory %   Control Value Avg
--- --------------- ------- --- ------ --- -----------------
1   Array           35      7   16.9m  100 125000000
2   Array as Stream 497     100 27.4k  0   125000000