mirror of
https://source.quilibrium.com/quilibrium/ceremonyclient.git
synced 2024-11-15 04:35:17 +00:00
76 lines
2.5 KiB
Go
76 lines
2.5 KiB
Go
|
package inmem_test
|
||
|
|
||
|
import (
|
||
|
"testing"
|
||
|
|
||
|
"github.com/stretchr/testify/assert"
|
||
|
hypergraph "source.quilibrium.com/quilibrium/monorepo/node/hypergraph/inmem"
|
||
|
)
|
||
|
|
||
|
func TestIdSet(t *testing.T) {
|
||
|
v := hypergraph.NewVertex("1", "here")
|
||
|
h := hypergraph.NewHyperedge("2", "here", make(map[string]hypergraph.Atom))
|
||
|
|
||
|
vset := hypergraph.NewIdSet("vertex")
|
||
|
hset := hypergraph.NewIdSet("hyperedge")
|
||
|
assert.NoError(t, vset.Add(v))
|
||
|
assert.NoError(t, hset.Add(h))
|
||
|
|
||
|
assert.True(t, vset.Has(v))
|
||
|
assert.True(t, hset.Has(h))
|
||
|
|
||
|
vset.Delete(v)
|
||
|
assert.False(t, hset.Has(v))
|
||
|
}
|
||
|
|
||
|
func TestCRDT(t *testing.T) {
|
||
|
loc1 := hypergraph.Location("here1")
|
||
|
loc2 := hypergraph.Location("here2")
|
||
|
hg := hypergraph.NewHypergraphCRDT([]hypergraph.Location{loc1, loc2})
|
||
|
|
||
|
v1 := hypergraph.NewVertex("1", loc1)
|
||
|
v2 := hypergraph.NewVertex("2", loc2)
|
||
|
h1 := hypergraph.NewHyperedge("h1", loc1, make(map[string]hypergraph.Atom))
|
||
|
|
||
|
hg.AddVertex(v1)
|
||
|
hg.AddVertex(v2)
|
||
|
hg.AddHyperedge(h1)
|
||
|
h2vs := map[string]hypergraph.Atom{}
|
||
|
h2vs["1"] = v1
|
||
|
h2vs["2"] = v2
|
||
|
h2 := hypergraph.NewHyperedge("h2", loc2, h2vs)
|
||
|
hg.AddHyperedge(h2)
|
||
|
|
||
|
h3vs := map[string]hypergraph.Atom{}
|
||
|
h3vs["h2"] = h2
|
||
|
h3 := hypergraph.NewHyperedge("h3", loc1, h3vs)
|
||
|
hg.AddHyperedge(h3)
|
||
|
|
||
|
assert.NotNil(t, hg.LookupVertex(v1))
|
||
|
assert.NotNil(t, hg.LookupVertex(v2))
|
||
|
assert.NotNil(t, hg.LookupHyperedge(h1))
|
||
|
assert.NotNil(t, hg.LookupHyperedge(h2))
|
||
|
assert.NotNil(t, hg.LookupHyperedge(h3))
|
||
|
|
||
|
assert.True(t, hg.GetReconciledVertexSet(v1.GetLocation()).Has(v1))
|
||
|
assert.False(t, hg.GetReconciledVertexSet(v1.GetLocation()).Has(v2))
|
||
|
assert.True(t, hg.GetReconciledVertexSet(v2.GetLocation()).Has(v2))
|
||
|
assert.True(t, hg.GetReconciledHyperedgeSet(v1.GetLocation()).Has(h1))
|
||
|
assert.False(t, hg.GetReconciledHyperedgeSet(h1.GetLocation()).Has(h2))
|
||
|
assert.True(t, hg.GetReconciledHyperedgeSet(h2.GetLocation()).Has(h2))
|
||
|
assert.True(t, hg.GetReconciledHyperedgeSet(h3.GetLocation()).Has(h3))
|
||
|
|
||
|
assert.Error(t, hg.RemoveHyperedge(h2))
|
||
|
assert.True(t, hg.GetReconciledHyperedgeSet(h2.GetLocation()).Has(h2))
|
||
|
assert.NoError(t, hg.RemoveHyperedge(h3))
|
||
|
assert.False(t, hg.GetReconciledHyperedgeSet(h3.GetLocation()).Has(h3))
|
||
|
assert.Error(t, hg.RemoveVertex(v1))
|
||
|
assert.True(t, hg.GetReconciledVertexSet(v1.GetLocation()).Has(v1))
|
||
|
assert.NoError(t, hg.RemoveHyperedge(h2))
|
||
|
assert.False(t, hg.GetReconciledHyperedgeSet(h2.GetLocation()).Has(h2))
|
||
|
assert.NoError(t, hg.RemoveVertex(v1))
|
||
|
assert.False(t, hg.GetReconciledVertexSet(v1.GetLocation()).Has(v1))
|
||
|
assert.NoError(t, hg.RemoveVertex(v2))
|
||
|
assert.False(t, hg.GetReconciledVertexSet(v2.GetLocation()).Has(v2))
|
||
|
}
|