diff --git a/internal/state/time.go b/internal/state/time.go deleted file mode 100644 index c0770b3af..000000000 --- a/internal/state/time.go +++ /dev/null @@ -1,46 +0,0 @@ -package state - -import ( - "sort" - "time" -) - -// weightedTime for computing a median. -type weightedTime struct { - Time time.Time - Weight int64 -} - -// newWeightedTime with time and weight. -func newWeightedTime(time time.Time, weight int64) *weightedTime { - return &weightedTime{ - Time: time, - Weight: weight, - } -} - -// weightedMedian computes weighted median time for a given array of WeightedTime and the total voting power. -func weightedMedian(weightedTimes []*weightedTime, totalVotingPower int64) (res time.Time) { - median := totalVotingPower / 2 - - sort.Slice(weightedTimes, func(i, j int) bool { - if weightedTimes[i] == nil { - return false - } - if weightedTimes[j] == nil { - return true - } - return weightedTimes[i].Time.UnixNano() < weightedTimes[j].Time.UnixNano() - }) - - for _, weightedTime := range weightedTimes { - if weightedTime != nil { - if median <= weightedTime.Weight { - res = weightedTime.Time - break - } - median -= weightedTime.Weight - } - } - return -} diff --git a/internal/state/time_test.go b/internal/state/time_test.go deleted file mode 100644 index 5da97e819..000000000 --- a/internal/state/time_test.go +++ /dev/null @@ -1,58 +0,0 @@ -package state - -import ( - "testing" - "time" - - "github.com/stretchr/testify/assert" - - tmtime "github.com/tendermint/tendermint/libs/time" -) - -func TestWeightedMedian(t *testing.T) { - m := make([]*weightedTime, 3) - - t1 := tmtime.Now() - t2 := t1.Add(5 * time.Second) - t3 := t1.Add(10 * time.Second) - - m[2] = newWeightedTime(t1, 33) // faulty processes - m[0] = newWeightedTime(t2, 40) // correct processes - m[1] = newWeightedTime(t3, 27) // correct processes - totalVotingPower := int64(100) - - median := weightedMedian(m, totalVotingPower) - assert.Equal(t, t2, median) - // median always returns value between values of correct processes - assert.Equal(t, true, (median.After(t1) || median.Equal(t1)) && - (median.Before(t3) || median.Equal(t3))) - - m[1] = newWeightedTime(t1, 40) // correct processes - m[2] = newWeightedTime(t2, 27) // correct processes - m[0] = newWeightedTime(t3, 33) // faulty processes - totalVotingPower = int64(100) - - median = weightedMedian(m, totalVotingPower) - assert.Equal(t, t2, median) - // median always returns value between values of correct processes - assert.Equal(t, true, (median.After(t1) || median.Equal(t1)) && - (median.Before(t2) || median.Equal(t2))) - - m = make([]*weightedTime, 8) - t4 := t1.Add(15 * time.Second) - t5 := t1.Add(60 * time.Second) - - m[3] = newWeightedTime(t1, 10) // correct processes - m[1] = newWeightedTime(t2, 10) // correct processes - m[5] = newWeightedTime(t2, 10) // correct processes - m[4] = newWeightedTime(t3, 23) // faulty processes - m[0] = newWeightedTime(t4, 20) // correct processes - m[7] = newWeightedTime(t5, 10) // faulty processes - totalVotingPower = int64(83) - - median = weightedMedian(m, totalVotingPower) - assert.Equal(t, t3, median) - // median always returns value between values of correct processes - assert.Equal(t, true, (median.After(t1) || median.Equal(t1)) && - (median.Before(t4) || median.Equal(t4))) -}