|
Akka/Scala example source code file (VectorClockPerfSpec.scala)
The VectorClockPerfSpec.scala Akka example source code/** * Copyright (C) 2009-2014 Typesafe Inc. <http://www.typesafe.com> */ package akka.cluster import akka.testkit.AkkaSpec import scala.collection.immutable.{ TreeMap, SortedSet } import org.scalatest.WordSpec import org.scalatest.Matchers object VectorClockPerfSpec { import VectorClock._ def createVectorClockOfSize(size: Int): (VectorClock, SortedSet[Node]) = ((VectorClock(), SortedSet.empty[Node]) /: (1 to size)) { case ((vc, nodes), i) ⇒ val node = Node(i.toString) (vc :+ node, nodes + node) } def copyVectorClock(vc: VectorClock): VectorClock = { val versions = (TreeMap.empty[Node, Long] /: vc.versions) { case (versions, (n, t)) ⇒ versions.updated(Node.fromHash(n), t) } vc.copy(versions = versions) } } @org.junit.runner.RunWith(classOf[org.scalatest.junit.JUnitRunner]) class VectorClockPerfSpec extends WordSpec with Matchers { import VectorClock._ import VectorClockPerfSpec._ val clockSize = sys.props.get("akka.cluster.VectorClockPerfSpec.clockSize").getOrElse("1000").toInt val iterations = sys.props.get("akka.cluster.VectorClockPerfSpec.iterations").getOrElse("10000").toInt val (vcBefore, nodes) = createVectorClockOfSize(clockSize) val firstNode = nodes.head val lastNode = nodes.last val middleNode = nodes.drop(clockSize / 2).head val vcBaseLast = vcBefore :+ lastNode val vcAfterLast = vcBaseLast :+ firstNode val vcConcurrentLast = vcBaseLast :+ lastNode val vcBaseMiddle = vcBefore :+ middleNode val vcAfterMiddle = vcBaseMiddle :+ firstNode val vcConcurrentMiddle = vcBaseMiddle :+ middleNode def checkThunkFor(vc1: VectorClock, vc2: VectorClock, thunk: (VectorClock, VectorClock) ⇒ Unit, times: Int): Unit = { val vcc1 = copyVectorClock(vc1) val vcc2 = copyVectorClock(vc2) for (i ← 1 to times) { thunk(vcc1, vcc2) } } def compareTo(order: Ordering)(vc1: VectorClock, vc2: VectorClock): Unit = { vc1 compareTo vc2 should be(order) } def !==(vc1: VectorClock, vc2: VectorClock): Unit = { vc1 == vc2 should be(false) } s"VectorClock comparisons of size $clockSize" must { s"do a warm up run $iterations times" in { checkThunkFor(vcBaseLast, vcBaseLast, compareTo(Same), iterations) } s"compare Same a $iterations times" in { checkThunkFor(vcBaseLast, vcBaseLast, compareTo(Same), iterations) } s"compare Before (last) $iterations times" in { checkThunkFor(vcBefore, vcBaseLast, compareTo(Before), iterations) } s"compare After (last) $iterations times" in { checkThunkFor(vcAfterLast, vcBaseLast, compareTo(After), iterations) } s"compare Concurrent (last) $iterations times" in { checkThunkFor(vcAfterLast, vcConcurrentLast, compareTo(Concurrent), iterations) } s"compare Before (middle) $iterations times" in { checkThunkFor(vcBefore, vcBaseMiddle, compareTo(Before), iterations) } s"compare After (middle) $iterations times" in { checkThunkFor(vcAfterMiddle, vcBaseMiddle, compareTo(After), iterations) } s"compare Concurrent (middle) $iterations times" in { checkThunkFor(vcAfterMiddle, vcConcurrentMiddle, compareTo(Concurrent), iterations) } s"compare !== Before (middle) $iterations times" in { checkThunkFor(vcBefore, vcBaseMiddle, !==, iterations) } s"compare !== After (middle) $iterations times" in { checkThunkFor(vcAfterMiddle, vcBaseMiddle, !==, iterations) } s"compare !== Concurrent (middle) $iterations times" in { checkThunkFor(vcAfterMiddle, vcConcurrentMiddle, !==, iterations) } } } Other Akka source code examplesHere is a short list of links related to this Akka VectorClockPerfSpec.scala source code file: |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.