49 lines
1.4 KiB
Go
49 lines
1.4 KiB
Go
|
package bits
|
||
|
|
||
|
import (
|
||
|
"math/big"
|
||
|
"testing"
|
||
|
)
|
||
|
|
||
|
func TestMaxRange(t *testing.T) {
|
||
|
start := FromHexP("000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")
|
||
|
end := FromHexP("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")
|
||
|
r := MaxRange()
|
||
|
|
||
|
if !r.Start.Equals(start) {
|
||
|
t.Error("max range does not start at the beginning")
|
||
|
}
|
||
|
if !r.End.Equals(end) {
|
||
|
t.Error("max range does not end at the end")
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestRange_IntervalP(t *testing.T) {
|
||
|
max := MaxRange()
|
||
|
|
||
|
numIntervals := 97
|
||
|
expectedAvg := (&big.Int{}).Div(max.IntervalSize(), big.NewInt(int64(numIntervals)))
|
||
|
maxDiff := big.NewInt(int64(numIntervals))
|
||
|
|
||
|
var lastEnd Bitmap
|
||
|
|
||
|
for i := 1; i <= numIntervals; i++ {
|
||
|
ival := max.IntervalP(i, numIntervals)
|
||
|
if i == 1 && !ival.Start.Equals(max.Start) {
|
||
|
t.Error("first interval does not start at 0")
|
||
|
}
|
||
|
if i == numIntervals && !ival.End.Equals(max.End) {
|
||
|
t.Error("last interval does not end at max")
|
||
|
}
|
||
|
if i > 1 && !ival.Start.Equals(lastEnd.Add(FromShortHexP("1"))) {
|
||
|
t.Errorf("interval %d of %d: last end was %s, this start is %s", i, numIntervals, lastEnd.Hex(), ival.Start.Hex())
|
||
|
}
|
||
|
|
||
|
if ival.IntervalSize().Cmp((&big.Int{}).Add(expectedAvg, maxDiff)) > 0 || ival.IntervalSize().Cmp((&big.Int{}).Sub(expectedAvg, maxDiff)) < 0 {
|
||
|
t.Errorf("interval %d of %d: interval size is outside the normal range", i, numIntervals)
|
||
|
}
|
||
|
|
||
|
lastEnd = ival.End
|
||
|
}
|
||
|
}
|