Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- object test extends testing.Benchmark {
- case class Row(time: Int)
- def counts(xs: List[Row], f : Row => Boolean, complete: Int = 0, incomplete: Int = 0): (Int, Int) =
- xs match {
- case Nil => (complete, incomplete)
- case row :: tail =>
- if (f(row)) counts(tail, f, complete + 1, incomplete)
- else counts(tail, f, complete, incomplete + 1)
- }
- def countsdhg(xs: List[Row], f : Row => Boolean) = {
- val complete = xs.count(f(_))
- (complete, xs.size - complete)
- }
- def countsdhg2(xs: List[Row], f : Row => Boolean) = {
- val (complete, incomplete) = xs.iterator.partition(f(_))
- (complete.size, incomplete.size)
- }
- def countvars(xs: List[Row], f : Row => Boolean) = {
- var complete = 0;
- var incomplete = 0;
- xs.foreach(r => if (f(r)) complete += 1 else incomplete += 1)
- (complete, incomplete)
- }
- def countdg(xs: List[Row], f: Row => Boolean) = {
- val complete = xs.view.filter(f(_)).size
- (complete, xs.length - complete)
- }
- val xs = List.fill(5000)(Row(util.Random.nextInt(2)))
- var res = (0, 0) // to avoid method call being optimized away
- def run {
- def f(r : Row) = r.time == 0
- //res = counts(xs, f) // 720
- //res = countsdhg(xs, f) // 730
- //res = countsdhg2(xs, f) // 2780
- res = countvars(xs, f) // 486
- //res = countdg(xs, f) // more than 270,000!
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement