Commit 8f0e37f2 authored by Kirill Smelkov's avatar Kirill Smelkov

X rebuild: tests: Precompute kadj10·kadj21

82s -> 75s.
parent 2c0b4793
...@@ -542,6 +542,23 @@ func (kadj KAdjMatrix) Map(keys SetKey) SetKey { ...@@ -542,6 +542,23 @@ func (kadj KAdjMatrix) Map(keys SetKey) SetKey {
return res return res
} }
// Mul returns kadjA·kadjB .
//
// (kadjA·kadjB).Map(keys) = kadjA.Map(kadjB.Map(keys))
func (kadjA KAdjMatrix) Mul(kadjB KAdjMatrix) KAdjMatrix {
// ~ assert kadjA.keys == kadjB.keys
// check only len here; the rest will be asserted by Map
if len(kadjA) != len(kadjB) {
panicf("kadj.Mul: different keys:\n\nkadjA: %v\nkadjB: %v", kadjA, kadjB)
}
kadj := make(KAdjMatrix, len(kadjB))
for k, tob := range kadjB {
kadj[k] = kadjA.Map(tob)
}
return kadj
}
// KAdj computes adjacency matrix for t1 -> t2 transition. // KAdj computes adjacency matrix for t1 -> t2 transition.
// //
// The set of keys for which kadj matrix is computed can be optionally provided. // The set of keys for which kadj matrix is computed can be optionally provided.
...@@ -962,6 +979,9 @@ func xverifyΔBTail_rebuild(t *testing.T, db *zodb.DB, treeRoot zodb.Oid, t0, t1 ...@@ -962,6 +979,9 @@ func xverifyΔBTail_rebuild(t *testing.T, db *zodb.DB, treeRoot zodb.Oid, t0, t1
kadj21 := KAdj(t2,t1, allTestKeys(t0,t1,t2)) kadj21 := KAdj(t2,t1, allTestKeys(t0,t1,t2))
kadj12 := KAdj(t1,t2, allTestKeys(t0,t1,t2)) kadj12 := KAdj(t1,t2, allTestKeys(t0,t1,t2))
// kadj210 = kadj10·kadj21
kadj210 := kadj10.Mul(kadj21)
ø := PPTreeSubSet{} ø := PPTreeSubSet{}
// verify t0 -> t1 Track(keys1) Rebuild -> t2 Track(keys2) Rebuild // verify t0 -> t1 Track(keys1) Rebuild -> t2 Track(keys2) Rebuild
...@@ -1008,7 +1028,7 @@ func xverifyΔBTail_rebuild(t *testing.T, db *zodb.DB, treeRoot zodb.Oid, t0, t1 ...@@ -1008,7 +1028,7 @@ func xverifyΔBTail_rebuild(t *testing.T, db *zodb.DB, treeRoot zodb.Oid, t0, t1
// Update() (which includes rebuild) // Update() (which includes rebuild)
keys1R2 := kadj12.Map(keys1) keys1R2 := kadj12.Map(keys1)
for { for {
keys1R2_ := kadj10.Map(kadj21.Map(keys1R2)) keys1R2_ := kadj210.Map(keys1R2)
if keys1R2.Equal(keys1R2_) { if keys1R2.Equal(keys1R2_) {
break break
} }
...@@ -1046,7 +1066,7 @@ func xverifyΔBTail_rebuild(t *testing.T, db *zodb.DB, treeRoot zodb.Oid, t0, t1 ...@@ -1046,7 +1066,7 @@ func xverifyΔBTail_rebuild(t *testing.T, db *zodb.DB, treeRoot zodb.Oid, t0, t1
// Track(keys2) + rebuild // Track(keys2) + rebuild
keys12R2 := keys1R2.Union(keys2) keys12R2 := keys1R2.Union(keys2)
for { for {
keys12R2_ := kadj10.Map(kadj21.Map(keys12R2)) keys12R2_ := kadj210.Map(keys12R2)
if keys12R2.Equal(keys12R2_) { if keys12R2.Equal(keys12R2_) {
break break
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment