mirror of
https://github.com/QuilibriumNetwork/ceremonyclient.git
synced 2026-02-22 02:47:26 +08:00
56 lines
2.2 KiB
Go
56 lines
2.2 KiB
Go
package token_test
|
|
|
|
import (
|
|
"crypto/rand"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"source.quilibrium.com/quilibrium/monorepo/node/execution/intrinsics/token"
|
|
"source.quilibrium.com/quilibrium/monorepo/node/execution/intrinsics/token/application"
|
|
"source.quilibrium.com/quilibrium/monorepo/node/protobufs"
|
|
"source.quilibrium.com/quilibrium/monorepo/node/tries"
|
|
)
|
|
|
|
func TestProcessJoinsAndLeaves(t *testing.T) {
|
|
set := [][]byte{}
|
|
for i := 0; i < 6000; i++ {
|
|
b := make([]byte, 9999)
|
|
rand.Read(b)
|
|
set = append(set, b)
|
|
}
|
|
|
|
joins := []token.PeerSeniorityItem{}
|
|
seniority := &token.PeerSeniority{}
|
|
for i, s := range set {
|
|
joins = append(joins, token.NewPeerSeniorityItem(uint64(i), string(s)))
|
|
(*seniority)[string(s)] = token.NewPeerSeniorityItem(uint64(i), string(s))
|
|
}
|
|
tr := []*tries.RollingFrecencyCritbitTrie{
|
|
&tries.RollingFrecencyCritbitTrie{},
|
|
&tries.RollingFrecencyCritbitTrie{},
|
|
}
|
|
app := &application.TokenApplication{
|
|
Tries: tr,
|
|
}
|
|
token.ProcessJoinsAndLeaves(joins, []token.PeerSeniorityItem{}, app, seniority, &protobufs.ClockFrame{FrameNumber: 9999})
|
|
|
|
assert.Equal(t, len(app.Tries), 4)
|
|
assert.Equal(t, len(app.Tries[1].FindNearestAndApproximateNeighbors(make([]byte, 32))), 2048)
|
|
assert.Equal(t, len(app.Tries[2].FindNearestAndApproximateNeighbors(make([]byte, 32))), 2048)
|
|
assert.Equal(t, len(app.Tries[3].FindNearestAndApproximateNeighbors(make([]byte, 32))), 1904)
|
|
|
|
leaves := []token.PeerSeniorityItem{}
|
|
// Seniority works from highest to lowest, so we should have one removal in the bottom most, three in the middle, and one in the highest
|
|
leaves = append(leaves, joins[30])
|
|
leaves = append(leaves, joins[1907])
|
|
leaves = append(leaves, joins[1955])
|
|
leaves = append(leaves, joins[2047])
|
|
leaves = append(leaves, joins[4095])
|
|
token.ProcessJoinsAndLeaves([]token.PeerSeniorityItem{}, leaves, app, seniority, &protobufs.ClockFrame{FrameNumber: 10000})
|
|
|
|
assert.Equal(t, len(app.Tries), 4)
|
|
assert.Equal(t, len(app.Tries[1].FindNearestAndApproximateNeighbors(make([]byte, 32))), 2048)
|
|
assert.Equal(t, len(app.Tries[2].FindNearestAndApproximateNeighbors(make([]byte, 32))), 2048)
|
|
assert.Equal(t, len(app.Tries[3].FindNearestAndApproximateNeighbors(make([]byte, 32))), 1899)
|
|
}
|