Buffer Benchmark

Code to Run

def test(collectionSize: Int) {
  println("\"Buffer (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 buffer: collection.mutable.Buffer[Bar] = (1 to collectionSize).map(i => new Bar(new Foo(i))).toBuffer

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

Results to Expect

"Buffer (size 10), test results:"

Num Name             Ops/Sec %   Memory %   Control Value Avg
--- ---------------- ------- --- ------ --- -----------------
1   Buffer           359.0k  23  1.5k   100 25
2   Buffer as Stream 1.4m    100 385    24  25

"Buffer (size 100), test results:"

Num Name             Ops/Sec %   Memory %   Control Value Avg
--- ---------------- ------- --- ------ --- -----------------
1   Buffer           6.0k    35  122.6k 100 2500
2   Buffer as Stream 17.2k   100 543    0   2500

"Buffer (size 1000), test results:"

Num Name             Ops/Sec %   Memory %   Control Value Avg
--- ---------------- ------- --- ------ --- -----------------
1   Buffer           70      35  7.6m   100 250000
2   Buffer as Stream 197     100 28.6k  0   250000

Specialized Test

Code to Run

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

  import scalqa.Stream.Enable._

  val buffer: collection.mutable.Buffer[Int] = (1 to collectionSize).toBuffer

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

Results to Expect

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

Num Name             Ops/Sec %   Memory %   Control Value Avg
--- ---------------- ------- --- ------ --- -----------------
1   Buffer           213.5k  15  0      0   125
2   Buffer as Stream 1.3m    100 445    100 125

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

Num Name             Ops/Sec %   Memory %   Control Value Avg
--- ---------------- ------- --- ------ --- -----------------
1   Buffer           2.6k    8   225.4k 100 125000
2   Buffer as Stream 28.9k   100 1.1k   0   125000

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

Num Name             Ops/Sec %   Memory %   Control Value Avg
--- ---------------- ------- --- ------ --- -----------------
1   Buffer           26      8   22.2m  100 125000000
2   Buffer as Stream 294     100 11.9k  0   125000000