|
Akka/Scala example source code file (VectorClockSpec.scala)
The VectorClockSpec.scala Akka example source code
/**
* Copyright (C) 2009-2014 Typesafe Inc. <http://www.typesafe.com>
*/
package akka.cluster
import akka.testkit.AkkaSpec
class VectorClockSpec extends AkkaSpec {
import VectorClock._
"A VectorClock" must {
"have zero versions when created" in {
val clock = VectorClock()
clock.versions should be(Map())
}
"not happen before itself" in {
val clock1 = VectorClock()
val clock2 = VectorClock()
clock1 <> clock2 should be(false)
}
"pass misc comparison test 1" in {
val clock1_1 = VectorClock()
val clock2_1 = clock1_1 :+ Node("1")
val clock3_1 = clock2_1 :+ Node("2")
val clock4_1 = clock3_1 :+ Node("1")
val clock1_2 = VectorClock()
val clock2_2 = clock1_2 :+ Node("1")
val clock3_2 = clock2_2 :+ Node("2")
val clock4_2 = clock3_2 :+ Node("1")
clock4_1 <> clock4_2 should be(false)
}
"pass misc comparison test 2" in {
val clock1_1 = VectorClock()
val clock2_1 = clock1_1 :+ Node("1")
val clock3_1 = clock2_1 :+ Node("2")
val clock4_1 = clock3_1 :+ Node("1")
val clock1_2 = VectorClock()
val clock2_2 = clock1_2 :+ Node("1")
val clock3_2 = clock2_2 :+ Node("2")
val clock4_2 = clock3_2 :+ Node("1")
val clock5_2 = clock4_2 :+ Node("3")
clock4_1 < clock5_2 should be(true)
}
"pass misc comparison test 3" in {
var clock1_1 = VectorClock()
val clock2_1 = clock1_1 :+ Node("1")
val clock1_2 = VectorClock()
val clock2_2 = clock1_2 :+ Node("2")
clock2_1 <> clock2_2 should be(true)
}
"pass misc comparison test 4" in {
val clock1_3 = VectorClock()
val clock2_3 = clock1_3 :+ Node("1")
val clock3_3 = clock2_3 :+ Node("2")
val clock4_3 = clock3_3 :+ Node("1")
val clock1_4 = VectorClock()
val clock2_4 = clock1_4 :+ Node("1")
val clock3_4 = clock2_4 :+ Node("1")
val clock4_4 = clock3_4 :+ Node("3")
clock4_3 <> clock4_4 should be(true)
}
"pass misc comparison test 5" in {
val clock1_1 = VectorClock()
val clock2_1 = clock1_1 :+ Node("2")
val clock3_1 = clock2_1 :+ Node("2")
val clock1_2 = VectorClock()
val clock2_2 = clock1_2 :+ Node("1")
val clock3_2 = clock2_2 :+ Node("2")
val clock4_2 = clock3_2 :+ Node("2")
val clock5_2 = clock4_2 :+ Node("3")
clock3_1 < clock5_2 should be(true)
clock5_2 > clock3_1 should be(true)
}
"pass misc comparison test 6" in {
val clock1_1 = VectorClock()
val clock2_1 = clock1_1 :+ Node("1")
val clock3_1 = clock2_1 :+ Node("2")
val clock1_2 = VectorClock()
val clock2_2 = clock1_2 :+ Node("1")
val clock3_2 = clock2_2 :+ Node("1")
clock3_1 <> clock3_2 should be(true)
clock3_2 <> clock3_1 should be(true)
}
"pass misc comparison test 7" in {
val clock1_1 = VectorClock()
val clock2_1 = clock1_1 :+ Node("1")
val clock3_1 = clock2_1 :+ Node("2")
val clock4_1 = clock3_1 :+ Node("2")
val clock5_1 = clock4_1 :+ Node("3")
val clock1_2 = clock4_1
val clock2_2 = clock1_2 :+ Node("2")
val clock3_2 = clock2_2 :+ Node("2")
clock5_1 <> clock3_2 should be(true)
clock3_2 <> clock5_1 should be(true)
}
"pass misc comparison test 8" in {
val clock1_1 = VectorClock()
val clock2_1 = clock1_1 :+ Node.fromHash("1")
val clock3_1 = clock2_1 :+ Node.fromHash("3")
val clock1_2 = clock3_1 :+ Node.fromHash("2")
val clock4_1 = clock3_1 :+ Node.fromHash("3")
clock4_1 <> clock1_2 should be(true)
clock1_2 <> clock4_1 should be(true)
}
"correctly merge two clocks" in {
val node1 = Node("1")
val node2 = Node("2")
val node3 = Node("3")
val clock1_1 = VectorClock()
val clock2_1 = clock1_1 :+ node1
val clock3_1 = clock2_1 :+ node2
val clock4_1 = clock3_1 :+ node2
val clock5_1 = clock4_1 :+ node3
val clock1_2 = clock4_1
val clock2_2 = clock1_2 :+ node2
val clock3_2 = clock2_2 :+ node2
val merged1 = clock3_2 merge clock5_1
merged1.versions.size should be(3)
merged1.versions.contains(node1) should be(true)
merged1.versions.contains(node2) should be(true)
merged1.versions.contains(node3) should be(true)
val merged2 = clock5_1 merge clock3_2
merged2.versions.size should be(3)
merged2.versions.contains(node1) should be(true)
merged2.versions.contains(node2) should be(true)
merged2.versions.contains(node3) should be(true)
clock3_2 < merged1 should be(true)
clock5_1 < merged1 should be(true)
clock3_2 < merged2 should be(true)
clock5_1 < merged2 should be(true)
merged1 == merged2 should be(true)
}
"correctly merge two disjoint vector clocks" in {
val node1 = Node("1")
val node2 = Node("2")
val node3 = Node("3")
val node4 = Node("4")
val clock1_1 = VectorClock()
val clock2_1 = clock1_1 :+ node1
val clock3_1 = clock2_1 :+ node2
val clock4_1 = clock3_1 :+ node2
val clock5_1 = clock4_1 :+ node3
val clock1_2 = VectorClock()
val clock2_2 = clock1_2 :+ node4
val clock3_2 = clock2_2 :+ node4
val merged1 = clock3_2 merge clock5_1
merged1.versions.size should be(4)
merged1.versions.contains(node1) should be(true)
merged1.versions.contains(node2) should be(true)
merged1.versions.contains(node3) should be(true)
merged1.versions.contains(node4) should be(true)
val merged2 = clock5_1 merge clock3_2
merged2.versions.size should be(4)
merged2.versions.contains(node1) should be(true)
merged2.versions.contains(node2) should be(true)
merged2.versions.contains(node3) should be(true)
merged2.versions.contains(node4) should be(true)
clock3_2 < merged1 should be(true)
clock5_1 < merged1 should be(true)
clock3_2 < merged2 should be(true)
clock5_1 < merged2 should be(true)
merged1 == merged2 should be(true)
}
"pass blank clock incrementing" in {
val node1 = Node("1")
val node2 = Node("2")
val v1 = VectorClock()
val v2 = VectorClock()
val vv1 = v1 :+ node1
val vv2 = v2 :+ node2
(vv1 > v1) should be(true)
(vv2 > v2) should be(true)
(vv1 > v2) should be(true)
(vv2 > v1) should be(true)
(vv2 > vv1) should be(false)
(vv1 > vv2) should be(false)
}
"pass merging behavior" in {
val node1 = Node("1")
val node2 = Node("2")
val node3 = Node("3")
val a = VectorClock()
val b = VectorClock()
val a1 = a :+ node1
val b1 = b :+ node2
var a2 = a1 :+ node1
var c = a2.merge(b1)
var c1 = c :+ node3
(c1 > a2) should be(true)
(c1 > b1) should be(true)
}
}
}
Other Akka source code examplesHere is a short list of links related to this Akka VectorClockSpec.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.