format source with scalafmt
This commit is contained in:
parent
0f40491d42
commit
ce404e4f53
1669 changed files with 43208 additions and 35404 deletions
|
|
@ -46,12 +46,8 @@ class ORMultiMapSpec extends WordSpec with Matchers {
|
|||
|
||||
// more to document that the concurrent removal from the set may be lost
|
||||
// than asserting anything
|
||||
merged1.entries should be(Map(
|
||||
"a" -> Set("A", "B")
|
||||
))
|
||||
merged2.entries should be(Map(
|
||||
"a" -> Set("A", "B")
|
||||
))
|
||||
merged1.entries should be(Map("a" -> Set("A", "B")))
|
||||
merged2.entries should be(Map("a" -> Set("A", "B")))
|
||||
}
|
||||
|
||||
"be able to have its entries correctly merged with another ORMultiMap with other entries" in {
|
||||
|
|
@ -60,15 +56,12 @@ class ORMultiMapSpec extends WordSpec with Matchers {
|
|||
|
||||
// merge both ways
|
||||
|
||||
val expectedMerge = Map(
|
||||
"a" -> Set("A"),
|
||||
"b" -> Set("B"),
|
||||
"c" -> Set("C"))
|
||||
val expectedMerge = Map("a" -> Set("A"), "b" -> Set("B"), "c" -> Set("C"))
|
||||
|
||||
val merged1 = m1 merge m2
|
||||
val merged1 = m1.merge(m2)
|
||||
merged1.entries should be(expectedMerge)
|
||||
|
||||
val merged2 = m2 merge m1
|
||||
val merged2 = m2.merge(m1)
|
||||
merged2.entries should be(expectedMerge)
|
||||
}
|
||||
|
||||
|
|
@ -87,63 +80,58 @@ class ORMultiMapSpec extends WordSpec with Matchers {
|
|||
|
||||
// merge both ways
|
||||
|
||||
val expectedMerged = Map(
|
||||
"a" -> Set("A2"),
|
||||
"b" -> Set("B1"),
|
||||
"c" -> Set("C2"),
|
||||
"d" -> Set("D1", "D2"))
|
||||
val expectedMerged = Map("a" -> Set("A2"), "b" -> Set("B1"), "c" -> Set("C2"), "d" -> Set("D1", "D2"))
|
||||
|
||||
val merged1 = m1 merge m2
|
||||
val merged1 = m1.merge(m2)
|
||||
merged1.entries should be(expectedMerged)
|
||||
|
||||
val merged2 = m2 merge m1
|
||||
val merged2 = m2.merge(m1)
|
||||
merged2.entries should be(expectedMerged)
|
||||
|
||||
val merged3 = m1 mergeDelta m2.delta.get
|
||||
val merged3 = m1.mergeDelta(m2.delta.get)
|
||||
merged3.entries should be(expectedMerged)
|
||||
|
||||
val merged4 = m2 mergeDelta m1.delta.get
|
||||
val merged4 = m2.mergeDelta(m1.delta.get)
|
||||
merged4.entries should be(expectedMerged)
|
||||
}
|
||||
}
|
||||
|
||||
"be able to have its entries correctly merged with another ORMultiMap with overlapping entries 2" in {
|
||||
val m1 = ORMultiMap()
|
||||
.addBinding(node1, "b", "B1")
|
||||
val m2 = ORMultiMap()
|
||||
.addBinding(node2, "b", "B2")
|
||||
.remove(node2, "b")
|
||||
val m1 = ORMultiMap().addBinding(node1, "b", "B1")
|
||||
val m2 = ORMultiMap().addBinding(node2, "b", "B2").remove(node2, "b")
|
||||
|
||||
// merge both ways
|
||||
|
||||
val expectedMerged = Map(
|
||||
"b" -> Set("B1"))
|
||||
val expectedMerged = Map("b" -> Set("B1"))
|
||||
|
||||
val merged1 = m1 merge m2
|
||||
val merged1 = m1.merge(m2)
|
||||
merged1.entries should be(expectedMerged)
|
||||
|
||||
val merged2 = m2 merge m1
|
||||
val merged2 = m2.merge(m1)
|
||||
merged2.entries should be(expectedMerged)
|
||||
|
||||
val merged3 = m1 mergeDelta m2.delta.get
|
||||
val merged3 = m1.mergeDelta(m2.delta.get)
|
||||
merged3.entries should be(expectedMerged)
|
||||
|
||||
val merged4 = m2 mergeDelta m1.delta.get
|
||||
val merged4 = m2.mergeDelta(m1.delta.get)
|
||||
merged4.entries should be(expectedMerged)
|
||||
}
|
||||
|
||||
"not have anomalies for remove+updated scenario and deltas" in {
|
||||
val m2a = ORMultiMap.empty[String, String].addBinding(node1, "q", "Q").removeBinding(node1, "q", "Q")
|
||||
val m1 = ORMultiMap.empty[String, String].addBinding(node1, "z", "Z").addBinding(node2, "x", "X")
|
||||
val m1 = ORMultiMap
|
||||
.empty[String, String]
|
||||
.addBinding(node1, "z", "Z")
|
||||
.addBinding(node2, "x", "X")
|
||||
.removeBinding(node1, "z", "Z")
|
||||
|
||||
val m2 = m2a.resetDelta.removeBinding(node2, "a", "A")
|
||||
|
||||
val merged1 = m1 merge m2
|
||||
val merged1 = m1.merge(m2)
|
||||
|
||||
merged1.contains("a") should be(false)
|
||||
|
||||
val merged2 = m1 mergeDelta m2.delta.get
|
||||
val merged2 = m1.mergeDelta(m2.delta.get)
|
||||
|
||||
merged2.contains("a") should be(false)
|
||||
}
|
||||
|
|
@ -156,9 +144,7 @@ class ORMultiMapSpec extends WordSpec with Matchers {
|
|||
|
||||
val m2 = m.put(node1, "a", a - "A1")
|
||||
|
||||
val expectedMerged = Map(
|
||||
"a" -> Set("A2"),
|
||||
"b" -> Set("B1"))
|
||||
val expectedMerged = Map("a" -> Set("A2"), "b" -> Set("B1"))
|
||||
|
||||
m2.entries should be(expectedMerged)
|
||||
}
|
||||
|
|
@ -179,36 +165,36 @@ class ORMultiMapSpec extends WordSpec with Matchers {
|
|||
val m1 = ORMultiMap.emptyWithValueDeltas[String, String].put(node1, "a", Set("A")).put(node1, "b", Set("B"))
|
||||
val m2 = ORMultiMap.emptyWithValueDeltas[String, String].put(node2, "c", Set("C"))
|
||||
|
||||
val merged1 = m1 merge m2
|
||||
val merged1 = m1.merge(m2)
|
||||
|
||||
val m3 = merged1.resetDelta.remove(node1, "b")
|
||||
val m4 = m3.resetDelta.addBinding(node1, "b", "B2")
|
||||
|
||||
val merged2 = m3 merge m4
|
||||
val merged2 = m3.merge(m4)
|
||||
|
||||
merged2.entries("a") should be(Set("A"))
|
||||
merged2.entries("b") should be(Set("B2"))
|
||||
merged2.entries("c") should be(Set("C"))
|
||||
|
||||
val merged3 = m3 mergeDelta m4.delta.get
|
||||
val merged3 = m3.mergeDelta(m4.delta.get)
|
||||
|
||||
merged3.entries("a") should be(Set("A"))
|
||||
merged3.entries("b") should be(Set("B2"))
|
||||
merged3.entries("c") should be(Set("C"))
|
||||
|
||||
val merged4 = merged1 merge m3 merge m4
|
||||
val merged4 = merged1.merge(m3).merge(m4)
|
||||
|
||||
merged4.entries("a") should be(Set("A"))
|
||||
merged4.entries("b") should be(Set("B2"))
|
||||
merged4.entries("c") should be(Set("C"))
|
||||
|
||||
val merged5 = merged1 mergeDelta m3.delta.get mergeDelta m4.delta.get
|
||||
val merged5 = merged1.mergeDelta(m3.delta.get).mergeDelta(m4.delta.get)
|
||||
|
||||
merged5.entries("a") should be(Set("A"))
|
||||
merged5.entries("b") should be(Set("B2"))
|
||||
merged5.entries("c") should be(Set("C"))
|
||||
|
||||
val merged6 = merged1 mergeDelta m3.delta.get.merge(m4.delta.get)
|
||||
val merged6 = merged1.mergeDelta(m3.delta.get.merge(m4.delta.get))
|
||||
|
||||
merged6.entries("a") should be(Set("A"))
|
||||
merged6.entries("b") should be(Set("B2"))
|
||||
|
|
@ -221,9 +207,9 @@ class ORMultiMapSpec extends WordSpec with Matchers {
|
|||
val m2 = ORMultiMap.emptyWithValueDeltas[String, String].put(node2, "c", Set("C"))
|
||||
|
||||
// m1 - node1 gets the update from m2
|
||||
val merged1 = m1 merge m2
|
||||
val merged1 = m1.merge(m2)
|
||||
// m2 - node2 gets the update from m1
|
||||
val merged2 = m2 merge m1
|
||||
val merged2 = m2.merge(m1)
|
||||
|
||||
// no race condition
|
||||
val m3 = merged1.resetDelta.remove(node1, "b")
|
||||
|
|
@ -232,9 +218,9 @@ class ORMultiMapSpec extends WordSpec with Matchers {
|
|||
// and the update is propagated before the update from node1 is merged
|
||||
val m4 = merged2.resetDelta.addBinding(node2, "b", "B2")
|
||||
// and later merged on node1
|
||||
val merged3 = m3 merge m4
|
||||
val merged3 = m3.merge(m4)
|
||||
// and the other way round...
|
||||
val merged4 = m4 merge m3
|
||||
val merged4 = m4.merge(m3)
|
||||
|
||||
// result - the element "B" is kept on both sides...
|
||||
merged3.entries("a") should be(Set("A"))
|
||||
|
|
@ -247,9 +233,9 @@ class ORMultiMapSpec extends WordSpec with Matchers {
|
|||
|
||||
// but if the timing was slightly different, so that the update from node1
|
||||
// would get merged just before update on node2:
|
||||
val merged5 = (m2 merge m3).resetDelta.addBinding(node2, "b", "B2")
|
||||
val merged5 = m2.merge(m3).resetDelta.addBinding(node2, "b", "B2")
|
||||
// the update propagated ... and merged on node1:
|
||||
val merged6 = m3 merge merged5
|
||||
val merged6 = m3.merge(merged5)
|
||||
|
||||
// then the outcome would be the same...
|
||||
merged5.entries("a") should be(Set("A"))
|
||||
|
|
@ -265,12 +251,12 @@ class ORMultiMapSpec extends WordSpec with Matchers {
|
|||
val m1 = ORMultiMap.emptyWithValueDeltas[String, String].put(node1, "a", Set("A")).put(node1, "b", Set("B"))
|
||||
val m2 = m1.resetDelta.put(node2, "b", Set("B2")).addBinding(node2, "b", "B3")
|
||||
|
||||
val merged1 = m1 merge m2
|
||||
val merged1 = m1.merge(m2)
|
||||
|
||||
merged1.entries("a") should be(Set("A"))
|
||||
merged1.entries("b") should be(Set("B2", "B3"))
|
||||
|
||||
val merged2 = m1 mergeDelta m2.delta.get
|
||||
val merged2 = m1.mergeDelta(m2.delta.get)
|
||||
|
||||
merged2.entries("a") should be(Set("A"))
|
||||
merged2.entries("b") should be(Set("B2", "B3"))
|
||||
|
|
@ -278,12 +264,12 @@ class ORMultiMapSpec extends WordSpec with Matchers {
|
|||
val m3 = ORMultiMap.emptyWithValueDeltas[String, String].put(node1, "a", Set("A")).put(node1, "b", Set("B"))
|
||||
val m4 = m3.resetDelta.put(node2, "b", Set("B2")).put(node2, "b", Set("B3"))
|
||||
|
||||
val merged3 = m3 merge m4
|
||||
val merged3 = m3.merge(m4)
|
||||
|
||||
merged3.entries("a") should be(Set("A"))
|
||||
merged3.entries("b") should be(Set("B3"))
|
||||
|
||||
val merged4 = m3 mergeDelta m4.delta.get
|
||||
val merged4 = m3.mergeDelta(m4.delta.get)
|
||||
|
||||
merged4.entries("a") should be(Set("A"))
|
||||
merged4.entries("b") should be(Set("B3"))
|
||||
|
|
@ -291,12 +277,12 @@ class ORMultiMapSpec extends WordSpec with Matchers {
|
|||
val m5 = ORMultiMap.emptyWithValueDeltas[String, String].put(node1, "a", Set("A")).put(node1, "b", Set("B"))
|
||||
val m6 = m5.resetDelta.put(node2, "b", Set("B2")).addBinding(node2, "b", "B3").addBinding(node2, "b", "B4")
|
||||
|
||||
val merged5 = m5 merge m6
|
||||
val merged5 = m5.merge(m6)
|
||||
|
||||
merged5.entries("a") should be(Set("A"))
|
||||
merged5.entries("b") should be(Set("B2", "B3", "B4"))
|
||||
|
||||
val merged6 = m5 mergeDelta m6.delta.get
|
||||
val merged6 = m5.mergeDelta(m6.delta.get)
|
||||
|
||||
merged6.entries("a") should be(Set("A"))
|
||||
merged6.entries("b") should be(Set("B2", "B3", "B4"))
|
||||
|
|
@ -304,13 +290,13 @@ class ORMultiMapSpec extends WordSpec with Matchers {
|
|||
val m7 = ORMultiMap.emptyWithValueDeltas[String, String].put(node1, "a", Set("A")).put(node1, "b", Set("B"))
|
||||
val m8 = m7.resetDelta.put(node2, "d", Set("D")).addBinding(node2, "b", "B3").put(node2, "b", Set("B4"))
|
||||
|
||||
val merged7 = m7 merge m8
|
||||
val merged7 = m7.merge(m8)
|
||||
|
||||
merged7.entries("a") should be(Set("A"))
|
||||
merged7.entries("b") should be(Set("B4"))
|
||||
merged7.entries("d") should be(Set("D"))
|
||||
|
||||
val merged8 = m7 mergeDelta m8.delta.get
|
||||
val merged8 = m7.mergeDelta(m8.delta.get)
|
||||
|
||||
merged8.entries("a") should be(Set("A"))
|
||||
merged8.entries("b") should be(Set("B4"))
|
||||
|
|
@ -319,55 +305,64 @@ class ORMultiMapSpec extends WordSpec with Matchers {
|
|||
val m9 = ORMultiMap.emptyWithValueDeltas[String, String].put(node1, "a", Set("A")).put(node1, "b", Set("B"))
|
||||
val m10 = m9.resetDelta.addBinding(node2, "b", "B3").addBinding(node2, "b", "B4")
|
||||
|
||||
val merged9 = m9 merge m10
|
||||
val merged9 = m9.merge(m10)
|
||||
|
||||
merged9.entries("a") should be(Set("A"))
|
||||
merged9.entries("b") should be(Set("B", "B3", "B4"))
|
||||
|
||||
val merged10 = m9 mergeDelta m10.delta.get
|
||||
val merged10 = m9.mergeDelta(m10.delta.get)
|
||||
|
||||
merged10.entries("a") should be(Set("A"))
|
||||
merged10.entries("b") should be(Set("B", "B3", "B4"))
|
||||
|
||||
val m11 = ORMultiMap.emptyWithValueDeltas[String, String].put(node1, "a", Set("A")).put(node1, "b", Set("B", "B1"))
|
||||
val m11 = ORMultiMap
|
||||
.emptyWithValueDeltas[String, String]
|
||||
.put(node1, "a", Set("A"))
|
||||
.put(node1, "b", Set("B", "B1"))
|
||||
.remove(node1, "b")
|
||||
val m12 = m11.resetDelta.addBinding(node2, "b", "B2").addBinding(node2, "b", "B3")
|
||||
|
||||
val merged11 = m11 merge m12
|
||||
val merged11 = m11.merge(m12)
|
||||
|
||||
merged11.entries("a") should be(Set("A"))
|
||||
merged11.entries("b") should be(Set("B2", "B3"))
|
||||
|
||||
val merged12 = m11 mergeDelta m12.delta.get
|
||||
val merged12 = m11.mergeDelta(m12.delta.get)
|
||||
|
||||
merged12.entries("a") should be(Set("A"))
|
||||
merged12.entries("b") should be(Set("B2", "B3"))
|
||||
|
||||
val m13 = ORMultiMap.emptyWithValueDeltas[String, String].put(node1, "a", Set("A")).put(node1, "b", Set("B", "B1"))
|
||||
val m13 = ORMultiMap
|
||||
.emptyWithValueDeltas[String, String]
|
||||
.put(node1, "a", Set("A"))
|
||||
.put(node1, "b", Set("B", "B1"))
|
||||
.remove(node1, "b")
|
||||
val m14 = m13.resetDelta.addBinding(node2, "b", "B2").put(node2, "b", Set("B3"))
|
||||
|
||||
val merged13 = m13 merge m14
|
||||
val merged13 = m13.merge(m14)
|
||||
|
||||
merged13.entries("a") should be(Set("A"))
|
||||
merged13.entries("b") should be(Set("B3"))
|
||||
|
||||
val merged14 = m13 mergeDelta m14.delta.get
|
||||
val merged14 = m13.mergeDelta(m14.delta.get)
|
||||
|
||||
merged14.entries("a") should be(Set("A"))
|
||||
merged14.entries("b") should be(Set("B3"))
|
||||
|
||||
val m15 = ORMultiMap.emptyWithValueDeltas[String, String].put(node1, "a", Set("A")).put(node1, "b", Set("B", "B1"))
|
||||
val m15 = ORMultiMap
|
||||
.emptyWithValueDeltas[String, String]
|
||||
.put(node1, "a", Set("A"))
|
||||
.put(node1, "b", Set("B", "B1"))
|
||||
.put(node1, "c", Set("C"))
|
||||
val m16 = m15.resetDelta.addBinding(node2, "b", "B2").addBinding(node2, "c", "C1")
|
||||
|
||||
val merged15 = m15 merge m16
|
||||
val merged15 = m15.merge(m16)
|
||||
|
||||
merged15.entries("a") should be(Set("A"))
|
||||
merged15.entries("b") should be(Set("B", "B1", "B2"))
|
||||
merged15.entries("c") should be(Set("C", "C1"))
|
||||
|
||||
val merged16 = m15 mergeDelta m16.delta.get
|
||||
val merged16 = m15.mergeDelta(m16.delta.get)
|
||||
|
||||
merged16.entries("a") should be(Set("A"))
|
||||
merged16.entries("b") should be(Set("B", "B1", "B2"))
|
||||
|
|
@ -378,12 +373,12 @@ class ORMultiMapSpec extends WordSpec with Matchers {
|
|||
val m18 = m17.resetDelta.addBinding(node2, "b", "B2")
|
||||
val m19 = ORMultiMap.emptyWithValueDeltas[String, String].resetDelta.put(node2, "b", Set("B3"))
|
||||
|
||||
val merged17 = m17 merge m18 merge m19
|
||||
val merged17 = m17.merge(m18).merge(m19)
|
||||
|
||||
merged17.entries("a") should be(Set("A"))
|
||||
merged17.entries("b") should be(Set("B", "B1", "B3"))
|
||||
|
||||
val merged18 = m17 mergeDelta m18.delta.get.merge(m19.delta.get)
|
||||
val merged18 = m17.mergeDelta(m18.delta.get.merge(m19.delta.get))
|
||||
|
||||
merged18.entries("a") should be(Set("A"))
|
||||
merged18.entries("b") should be(Set("B", "B1", "B3"))
|
||||
|
|
@ -393,12 +388,12 @@ class ORMultiMapSpec extends WordSpec with Matchers {
|
|||
val m1 = ORMultiMap.empty[String, String].put(node1, "a", Set("A")).put(node1, "b", Set("B"))
|
||||
val m2 = m1.resetDelta.put(node2, "b", Set("B2")).addBinding(node2, "b", "B3")
|
||||
|
||||
val merged1 = m1 merge m2
|
||||
val merged1 = m1.merge(m2)
|
||||
|
||||
merged1.entries("a") should be(Set("A"))
|
||||
merged1.entries("b") should be(Set("B2", "B3"))
|
||||
|
||||
val merged2 = m1 mergeDelta m2.delta.get
|
||||
val merged2 = m1.mergeDelta(m2.delta.get)
|
||||
|
||||
merged2.entries("a") should be(Set("A"))
|
||||
merged2.entries("b") should be(Set("B2", "B3"))
|
||||
|
|
@ -406,12 +401,12 @@ class ORMultiMapSpec extends WordSpec with Matchers {
|
|||
val m3 = ORMultiMap.empty[String, String].put(node1, "a", Set("A")).put(node1, "b", Set("B"))
|
||||
val m4 = m3.resetDelta.put(node2, "b", Set("B2")).put(node2, "b", Set("B3"))
|
||||
|
||||
val merged3 = m3 merge m4
|
||||
val merged3 = m3.merge(m4)
|
||||
|
||||
merged3.entries("a") should be(Set("A"))
|
||||
merged3.entries("b") should be(Set("B3"))
|
||||
|
||||
val merged4 = m3 mergeDelta m4.delta.get
|
||||
val merged4 = m3.mergeDelta(m4.delta.get)
|
||||
|
||||
merged4.entries("a") should be(Set("A"))
|
||||
merged4.entries("b") should be(Set("B3"))
|
||||
|
|
@ -419,12 +414,12 @@ class ORMultiMapSpec extends WordSpec with Matchers {
|
|||
val m5 = ORMultiMap.empty[String, String].put(node1, "a", Set("A")).put(node1, "b", Set("B"))
|
||||
val m6 = m5.resetDelta.put(node2, "b", Set("B2")).addBinding(node2, "b", "B3").addBinding(node2, "b", "B4")
|
||||
|
||||
val merged5 = m5 merge m6
|
||||
val merged5 = m5.merge(m6)
|
||||
|
||||
merged5.entries("a") should be(Set("A"))
|
||||
merged5.entries("b") should be(Set("B2", "B3", "B4"))
|
||||
|
||||
val merged6 = m5 mergeDelta m6.delta.get
|
||||
val merged6 = m5.mergeDelta(m6.delta.get)
|
||||
|
||||
merged6.entries("a") should be(Set("A"))
|
||||
merged6.entries("b") should be(Set("B2", "B3", "B4"))
|
||||
|
|
@ -432,13 +427,13 @@ class ORMultiMapSpec extends WordSpec with Matchers {
|
|||
val m7 = ORMultiMap.empty[String, String].put(node1, "a", Set("A")).put(node1, "b", Set("B"))
|
||||
val m8 = m7.resetDelta.put(node2, "d", Set("D")).addBinding(node2, "b", "B3").put(node2, "b", Set("B4"))
|
||||
|
||||
val merged7 = m7 merge m8
|
||||
val merged7 = m7.merge(m8)
|
||||
|
||||
merged7.entries("a") should be(Set("A"))
|
||||
merged7.entries("b") should be(Set("B4"))
|
||||
merged7.entries("d") should be(Set("D"))
|
||||
|
||||
val merged8 = m7 mergeDelta m8.delta.get
|
||||
val merged8 = m7.mergeDelta(m8.delta.get)
|
||||
|
||||
merged8.entries("a") should be(Set("A"))
|
||||
merged8.entries("b") should be(Set("B4"))
|
||||
|
|
@ -447,26 +442,26 @@ class ORMultiMapSpec extends WordSpec with Matchers {
|
|||
val m9 = ORMultiMap.empty[String, String].put(node1, "a", Set("A")).put(node1, "b", Set("B"))
|
||||
val m10 = m9.resetDelta.addBinding(node2, "b", "B3").addBinding(node2, "b", "B4")
|
||||
|
||||
val merged9 = m9 merge m10
|
||||
val merged9 = m9.merge(m10)
|
||||
|
||||
merged9.entries("a") should be(Set("A"))
|
||||
merged9.entries("b") should be(Set("B", "B3", "B4"))
|
||||
|
||||
val merged10 = m9 mergeDelta m10.delta.get
|
||||
val merged10 = m9.mergeDelta(m10.delta.get)
|
||||
|
||||
merged10.entries("a") should be(Set("A"))
|
||||
merged10.entries("b") should be(Set("B", "B3", "B4"))
|
||||
|
||||
val m11 = ORMultiMap.empty[String, String].put(node1, "a", Set("A")).put(node1, "b", Set("B", "B1"))
|
||||
.remove(node1, "b")
|
||||
val m11 =
|
||||
ORMultiMap.empty[String, String].put(node1, "a", Set("A")).put(node1, "b", Set("B", "B1")).remove(node1, "b")
|
||||
val m12 = ORMultiMap.empty[String, String].addBinding(node2, "b", "B2").addBinding(node2, "b", "B3")
|
||||
|
||||
val merged11 = m11 merge m12
|
||||
val merged11 = m11.merge(m12)
|
||||
|
||||
merged11.entries("a") should be(Set("A"))
|
||||
merged11.entries("b") should be(Set("B2", "B3"))
|
||||
|
||||
val merged12 = m11 mergeDelta m12.delta.get
|
||||
val merged12 = m11.mergeDelta(m12.delta.get)
|
||||
|
||||
merged12.entries("a") should be(Set("A"))
|
||||
merged12.entries("b") should be(Set("B2", "B3"))
|
||||
|
|
@ -488,13 +483,15 @@ class ORMultiMapSpec extends WordSpec with Matchers {
|
|||
val m3 = m1.mergeDelta(m2.delta.get)
|
||||
val m4 = m1.merge(m2)
|
||||
|
||||
m3.underlying.values.contains("a") should be(false) // tombstone for 'a' has been optimized away at the end of the mergeDelta
|
||||
m4.underlying.values.contains("a") should be(false) // tombstone for 'a' has been optimized away at the end of the merge
|
||||
m3.underlying.values
|
||||
.contains("a") should be(false) // tombstone for 'a' has been optimized away at the end of the mergeDelta
|
||||
m4.underlying.values
|
||||
.contains("a") should be(false) // tombstone for 'a' has been optimized away at the end of the merge
|
||||
|
||||
val m5 = ORMultiMap.emptyWithValueDeltas[String, String].put(node1, "a", Set("A1"))
|
||||
(m3 mergeDelta m5.delta.get).entries("a") should ===(Set("A1"))
|
||||
(m4 mergeDelta m5.delta.get).entries("a") should ===(Set("A1"))
|
||||
(m4 merge m5).entries("a") should ===(Set("A1"))
|
||||
m3.mergeDelta(m5.delta.get).entries("a") should ===(Set("A1"))
|
||||
m4.mergeDelta(m5.delta.get).entries("a") should ===(Set("A1"))
|
||||
m4.merge(m5).entries("a") should ===(Set("A1"))
|
||||
|
||||
// addBinding - add a binding for a certain value - no tombstone is created
|
||||
// this operation works through "updated" call of the underlying ORMap, that is not exposed
|
||||
|
|
@ -510,13 +507,15 @@ class ORMultiMapSpec extends WordSpec with Matchers {
|
|||
val um3 = um1.mergeDelta(um2.delta.get)
|
||||
val um4 = um1.merge(um2)
|
||||
|
||||
um3.underlying.values.contains("a") should be(false) // tombstone for 'a' has been optimized away at the end of the mergeDelta
|
||||
um4.underlying.values.contains("a") should be(false) // tombstone for 'a' has been optimized away at the end of the merge
|
||||
um3.underlying.values
|
||||
.contains("a") should be(false) // tombstone for 'a' has been optimized away at the end of the mergeDelta
|
||||
um4.underlying.values
|
||||
.contains("a") should be(false) // tombstone for 'a' has been optimized away at the end of the merge
|
||||
|
||||
val um5 = ORMultiMap.emptyWithValueDeltas[String, String].addBinding(node1, "a", "A1")
|
||||
(um3 mergeDelta um5.delta.get).entries("a") should ===(Set("A1"))
|
||||
(um4 mergeDelta um5.delta.get).entries("a") should ===(Set("A1"))
|
||||
(um4 merge um5).entries("a") should ===(Set("A1"))
|
||||
um3.mergeDelta(um5.delta.get).entries("a") should ===(Set("A1"))
|
||||
um4.mergeDelta(um5.delta.get).entries("a") should ===(Set("A1"))
|
||||
um4.merge(um5).entries("a") should ===(Set("A1"))
|
||||
|
||||
// replaceBinding - that would first addBinding for new binding and then removeBinding for old binding
|
||||
// so no tombstone would be created
|
||||
|
|
@ -528,15 +527,22 @@ class ORMultiMapSpec extends WordSpec with Matchers {
|
|||
// without previous delta containing 'clear' or 'put' operation setting the tombstone at Set()
|
||||
// the example shown below cannot happen in practice
|
||||
|
||||
val tm1 = new ORMultiMap(ORMultiMap.emptyWithValueDeltas[String, String].addBinding(node1, "a", "A").underlying.removeKey(node1, "a"), true)
|
||||
val tm1 = new ORMultiMap(
|
||||
ORMultiMap.emptyWithValueDeltas[String, String].addBinding(node1, "a", "A").underlying.removeKey(node1, "a"),
|
||||
true)
|
||||
tm1.underlying.values("a").elements should ===(Set("A")) // tombstone
|
||||
tm1.addBinding(node1, "a", "A1").entries("a") should be(Set("A", "A1"))
|
||||
val tm2 = ORMultiMap.emptyWithValueDeltas[String, String].put(node1, "a", Set("A")).resetDelta.addBinding(node1, "a", "A1")
|
||||
val tm2 =
|
||||
ORMultiMap.emptyWithValueDeltas[String, String].put(node1, "a", Set("A")).resetDelta.addBinding(node1, "a", "A1")
|
||||
tm1.mergeDelta(tm2.delta.get).entries("a") should be(Set("A", "A1"))
|
||||
tm1.merge(tm2).entries("a") should be(Set("A", "A1"))
|
||||
val tm3 = new ORMultiMap(ORMultiMap.emptyWithValueDeltas[String, String].addBinding(node1, "a", "A").underlying.remove(node1, "a"), true)
|
||||
val tm3 = new ORMultiMap(
|
||||
ORMultiMap.emptyWithValueDeltas[String, String].addBinding(node1, "a", "A").underlying.remove(node1, "a"),
|
||||
true)
|
||||
tm3.underlying.contains("a") should ===(false) // no tombstone, because remove not removeKey
|
||||
tm3.mergeDelta(tm2.delta.get).entries should ===(Map.empty[String, String]) // no tombstone - update delta could not be applied
|
||||
tm3
|
||||
.mergeDelta(tm2.delta.get)
|
||||
.entries should ===(Map.empty[String, String]) // no tombstone - update delta could not be applied
|
||||
tm3.merge(tm2).entries should ===(Map.empty[String, String])
|
||||
|
||||
// The only valid value for tombstone created by means of either API call or application of delta propagation is Set()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue