mirror of
https://github.com/OffchainLabs/prysm.git
synced 2026-01-09 15:37:56 -05:00
@@ -3,7 +3,7 @@ package slice
|
||||
import (
|
||||
"strings"
|
||||
|
||||
types "github.com/prysmaticlabs/prysm/v3/consensus-types/primitives"
|
||||
"github.com/prysmaticlabs/prysm/v3/consensus-types/primitives"
|
||||
)
|
||||
|
||||
// SubsetUint64 returns true if the first array is
|
||||
@@ -310,15 +310,15 @@ func SplitOffset(listSize, chunks, index uint64) uint64 {
|
||||
// complexity of approximately O(n) leveraging a map to
|
||||
// check for element existence off by a constant factor
|
||||
// of underlying map efficiency.
|
||||
func IntersectionSlot(s ...[]types.Slot) []types.Slot {
|
||||
func IntersectionSlot(s ...[]primitives.Slot) []primitives.Slot {
|
||||
if len(s) == 0 {
|
||||
return []types.Slot{}
|
||||
return []primitives.Slot{}
|
||||
}
|
||||
if len(s) == 1 {
|
||||
return s[0]
|
||||
}
|
||||
intersect := make([]types.Slot, 0)
|
||||
m := make(map[types.Slot]int)
|
||||
intersect := make([]primitives.Slot, 0)
|
||||
m := make(map[primitives.Slot]int)
|
||||
for _, k := range s[0] {
|
||||
m[k] = 1
|
||||
}
|
||||
@@ -340,9 +340,9 @@ func IntersectionSlot(s ...[]types.Slot) []types.Slot {
|
||||
// not in slice a with time complexity of approximately
|
||||
// O(n) leveraging a map to check for element existence
|
||||
// off by a constant factor of underlying map efficiency.
|
||||
func NotSlot(a, b []types.Slot) []types.Slot {
|
||||
set := make([]types.Slot, 0)
|
||||
m := make(map[types.Slot]bool)
|
||||
func NotSlot(a, b []primitives.Slot) []primitives.Slot {
|
||||
set := make([]primitives.Slot, 0)
|
||||
m := make(map[primitives.Slot]bool)
|
||||
|
||||
for i := 0; i < len(a); i++ {
|
||||
m[a[i]] = true
|
||||
@@ -356,7 +356,7 @@ func NotSlot(a, b []types.Slot) []types.Slot {
|
||||
}
|
||||
|
||||
// IsInSlots returns true if a is in b and False otherwise.
|
||||
func IsInSlots(a types.Slot, b []types.Slot) bool {
|
||||
func IsInSlots(a primitives.Slot, b []primitives.Slot) bool {
|
||||
for _, v := range b {
|
||||
if a == v {
|
||||
return true
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"sort"
|
||||
"testing"
|
||||
|
||||
types "github.com/prysmaticlabs/prysm/v3/consensus-types/primitives"
|
||||
"github.com/prysmaticlabs/prysm/v3/consensus-types/primitives"
|
||||
"github.com/prysmaticlabs/prysm/v3/container/slice"
|
||||
"github.com/prysmaticlabs/prysm/v3/testing/require"
|
||||
)
|
||||
@@ -503,31 +503,31 @@ func TestSplitOffset_OK(t *testing.T) {
|
||||
|
||||
func TestIntersectionSlot(t *testing.T) {
|
||||
testCases := []struct {
|
||||
setA []types.Slot
|
||||
setB []types.Slot
|
||||
setC []types.Slot
|
||||
out []types.Slot
|
||||
setA []primitives.Slot
|
||||
setB []primitives.Slot
|
||||
setC []primitives.Slot
|
||||
out []primitives.Slot
|
||||
}{
|
||||
{[]types.Slot{2, 3, 5}, []types.Slot{3}, []types.Slot{3}, []types.Slot{3}},
|
||||
{[]types.Slot{2, 3, 5}, []types.Slot{3, 5}, []types.Slot{5}, []types.Slot{5}},
|
||||
{[]types.Slot{2, 3, 5}, []types.Slot{3, 5}, []types.Slot{3, 5}, []types.Slot{3, 5}},
|
||||
{[]types.Slot{2, 3, 5}, []types.Slot{5, 3, 2}, []types.Slot{3, 2, 5}, []types.Slot{2, 3, 5}},
|
||||
{[]types.Slot{3, 2, 5}, []types.Slot{5, 3, 2}, []types.Slot{3, 2, 5}, []types.Slot{2, 3, 5}},
|
||||
{[]types.Slot{3, 3, 5}, []types.Slot{5, 3, 2}, []types.Slot{3, 2, 5}, []types.Slot{3, 5}},
|
||||
{[]types.Slot{2, 3, 5}, []types.Slot{2, 3, 5}, []types.Slot{2, 3, 5}, []types.Slot{2, 3, 5}},
|
||||
{[]types.Slot{2, 3, 5}, []types.Slot{}, []types.Slot{}, []types.Slot{}},
|
||||
{[]types.Slot{2, 3, 5}, []types.Slot{2, 3, 5}, []types.Slot{}, []types.Slot{}},
|
||||
{[]types.Slot{2, 3}, []types.Slot{2, 3, 5}, []types.Slot{5}, []types.Slot{}},
|
||||
{[]types.Slot{2, 2, 2}, []types.Slot{2, 2, 2}, []types.Slot{}, []types.Slot{}},
|
||||
{[]types.Slot{}, []types.Slot{2, 3, 5}, []types.Slot{}, []types.Slot{}},
|
||||
{[]types.Slot{}, []types.Slot{}, []types.Slot{}, []types.Slot{}},
|
||||
{[]types.Slot{1}, []types.Slot{1}, []types.Slot{}, []types.Slot{}},
|
||||
{[]types.Slot{1, 1, 1}, []types.Slot{1, 1}, []types.Slot{1, 2, 3}, []types.Slot{1}},
|
||||
{[]primitives.Slot{2, 3, 5}, []primitives.Slot{3}, []primitives.Slot{3}, []primitives.Slot{3}},
|
||||
{[]primitives.Slot{2, 3, 5}, []primitives.Slot{3, 5}, []primitives.Slot{5}, []primitives.Slot{5}},
|
||||
{[]primitives.Slot{2, 3, 5}, []primitives.Slot{3, 5}, []primitives.Slot{3, 5}, []primitives.Slot{3, 5}},
|
||||
{[]primitives.Slot{2, 3, 5}, []primitives.Slot{5, 3, 2}, []primitives.Slot{3, 2, 5}, []primitives.Slot{2, 3, 5}},
|
||||
{[]primitives.Slot{3, 2, 5}, []primitives.Slot{5, 3, 2}, []primitives.Slot{3, 2, 5}, []primitives.Slot{2, 3, 5}},
|
||||
{[]primitives.Slot{3, 3, 5}, []primitives.Slot{5, 3, 2}, []primitives.Slot{3, 2, 5}, []primitives.Slot{3, 5}},
|
||||
{[]primitives.Slot{2, 3, 5}, []primitives.Slot{2, 3, 5}, []primitives.Slot{2, 3, 5}, []primitives.Slot{2, 3, 5}},
|
||||
{[]primitives.Slot{2, 3, 5}, []primitives.Slot{}, []primitives.Slot{}, []primitives.Slot{}},
|
||||
{[]primitives.Slot{2, 3, 5}, []primitives.Slot{2, 3, 5}, []primitives.Slot{}, []primitives.Slot{}},
|
||||
{[]primitives.Slot{2, 3}, []primitives.Slot{2, 3, 5}, []primitives.Slot{5}, []primitives.Slot{}},
|
||||
{[]primitives.Slot{2, 2, 2}, []primitives.Slot{2, 2, 2}, []primitives.Slot{}, []primitives.Slot{}},
|
||||
{[]primitives.Slot{}, []primitives.Slot{2, 3, 5}, []primitives.Slot{}, []primitives.Slot{}},
|
||||
{[]primitives.Slot{}, []primitives.Slot{}, []primitives.Slot{}, []primitives.Slot{}},
|
||||
{[]primitives.Slot{1}, []primitives.Slot{1}, []primitives.Slot{}, []primitives.Slot{}},
|
||||
{[]primitives.Slot{1, 1, 1}, []primitives.Slot{1, 1}, []primitives.Slot{1, 2, 3}, []primitives.Slot{1}},
|
||||
}
|
||||
for _, tt := range testCases {
|
||||
setA := append([]types.Slot{}, tt.setA...)
|
||||
setB := append([]types.Slot{}, tt.setB...)
|
||||
setC := append([]types.Slot{}, tt.setC...)
|
||||
setA := append([]primitives.Slot{}, tt.setA...)
|
||||
setB := append([]primitives.Slot{}, tt.setB...)
|
||||
setC := append([]primitives.Slot{}, tt.setC...)
|
||||
result := slice.IntersectionSlot(setA, setB, setC)
|
||||
sort.Slice(result, func(i, j int) bool {
|
||||
return result[i] < result[j]
|
||||
@@ -549,17 +549,17 @@ func TestIntersectionSlot(t *testing.T) {
|
||||
|
||||
func TestNotSlot(t *testing.T) {
|
||||
testCases := []struct {
|
||||
setA []types.Slot
|
||||
setB []types.Slot
|
||||
out []types.Slot
|
||||
setA []primitives.Slot
|
||||
setB []primitives.Slot
|
||||
out []primitives.Slot
|
||||
}{
|
||||
{[]types.Slot{4, 6}, []types.Slot{2, 3, 5, 4, 6}, []types.Slot{2, 3, 5}},
|
||||
{[]types.Slot{3, 5}, []types.Slot{2, 3, 5}, []types.Slot{2}},
|
||||
{[]types.Slot{2, 3, 5}, []types.Slot{2, 3, 5}, []types.Slot{}},
|
||||
{[]types.Slot{2}, []types.Slot{2, 3, 5}, []types.Slot{3, 5}},
|
||||
{[]types.Slot{}, []types.Slot{2, 3, 5}, []types.Slot{2, 3, 5}},
|
||||
{[]types.Slot{}, []types.Slot{}, []types.Slot{}},
|
||||
{[]types.Slot{1}, []types.Slot{1}, []types.Slot{}},
|
||||
{[]primitives.Slot{4, 6}, []primitives.Slot{2, 3, 5, 4, 6}, []primitives.Slot{2, 3, 5}},
|
||||
{[]primitives.Slot{3, 5}, []primitives.Slot{2, 3, 5}, []primitives.Slot{2}},
|
||||
{[]primitives.Slot{2, 3, 5}, []primitives.Slot{2, 3, 5}, []primitives.Slot{}},
|
||||
{[]primitives.Slot{2}, []primitives.Slot{2, 3, 5}, []primitives.Slot{3, 5}},
|
||||
{[]primitives.Slot{}, []primitives.Slot{2, 3, 5}, []primitives.Slot{2, 3, 5}},
|
||||
{[]primitives.Slot{}, []primitives.Slot{}, []primitives.Slot{}},
|
||||
{[]primitives.Slot{1}, []primitives.Slot{1}, []primitives.Slot{}},
|
||||
}
|
||||
for _, tt := range testCases {
|
||||
result := slice.NotSlot(tt.setA, tt.setB)
|
||||
@@ -571,14 +571,14 @@ func TestNotSlot(t *testing.T) {
|
||||
|
||||
func TestIsInSlots(t *testing.T) {
|
||||
testCases := []struct {
|
||||
a types.Slot
|
||||
b []types.Slot
|
||||
a primitives.Slot
|
||||
b []primitives.Slot
|
||||
result bool
|
||||
}{
|
||||
{0, []types.Slot{}, false},
|
||||
{0, []types.Slot{0}, true},
|
||||
{4, []types.Slot{2, 3, 5, 4, 6}, true},
|
||||
{100, []types.Slot{2, 3, 5, 4, 6}, false},
|
||||
{0, []primitives.Slot{}, false},
|
||||
{0, []primitives.Slot{0}, true},
|
||||
{4, []primitives.Slot{2, 3, 5, 4, 6}, true},
|
||||
{100, []primitives.Slot{2, 3, 5, 4, 6}, false},
|
||||
}
|
||||
for _, tt := range testCases {
|
||||
result := slice.IsInSlots(tt.a, tt.b)
|
||||
|
||||
Reference in New Issue
Block a user