triedb/pathdb: address comments from guillaume

This commit is contained in:
Gary Rong 2026-01-08 11:03:06 +08:00
parent 0fca084df0
commit 0a8ee5238b
6 changed files with 47 additions and 17 deletions

View file

@ -28,7 +28,7 @@ import (
const (
indexBlockDescSize = 14 // The size of index block descriptor
indexBlockSizeCap = 4096 // The maximum size of a single index block
indexBlockMaxSize = 4096 // The maximum size of a single index block
indexBlockRestartLen = 256 // The restart interval length of index block
)
@ -457,7 +457,7 @@ func (b *blockWriter) empty() bool {
func (b *blockWriter) estimateFull(ext []uint16) bool {
size := 8 + 2*len(ext)
return len(b.data)+size > indexBlockSizeCap
return len(b.data)+size > indexBlockMaxSize
}
// last returns the last element in the block. It should only be called when

View file

@ -126,7 +126,7 @@ func (f extFilter) contains(bitmap []byte) (bool, error) {
}
// Check descendants: the presence of any descendant implicitly
// represents a mutation of its ancestor.
return isByteSet(bitmap, 2+2*n) || isByteSet(bitmap, 3+2*n), nil
return bitmap[2+2*n] != 0 || bitmap[3+2*n] != 0, nil
}
default:
return false, fmt.Errorf("unsupported bitmap size %d", len(bitmap))

View file

@ -208,7 +208,7 @@ func (h *trienodeHistory) encode() ([]byte, []byte, []byte, error) {
restarts = append(restarts, internalValOffset)
prefixLen = 0
} else {
prefixLen = sharedLen(prevKey, key)
prefixLen = commonPrefixLen(prevKey, key)
}
value := h.nodes[owner][path]

View file

@ -580,8 +580,8 @@ func TestTrienodeHistoryReaderIterator(t *testing.T) {
}
}
// TestSharedLen tests the sharedLen helper function
func TestSharedLen(t *testing.T) {
// TestCommonPrefixLen tests the commonPrefixLen helper function
func TestCommonPrefixLen(t *testing.T) {
tests := []struct {
a, b []byte
expected int
@ -610,13 +610,13 @@ func TestSharedLen(t *testing.T) {
}
for i, test := range tests {
result := sharedLen(test.a, test.b)
result := commonPrefixLen(test.a, test.b)
if result != test.expected {
t.Errorf("Test %d: sharedLen(%q, %q) = %d, expected %d",
i, test.a, test.b, result, test.expected)
}
// Test commutativity
resultReverse := sharedLen(test.b, test.a)
resultReverse := commonPrefixLen(test.b, test.a)
if result != resultReverse {
t.Errorf("Test %d: sharedLen is not commutative: sharedLen(a,b)=%d, sharedLen(b,a)=%d",
i, result, resultReverse)

View file

@ -22,8 +22,8 @@ import (
"slices"
)
// sharedLen returns the length of the common prefix shared by a and b.
func sharedLen(a, b []byte) int {
// commonPrefixLen returns the length of the common prefix shared by a and b.
func commonPrefixLen(a, b []byte) int {
n := min(len(a), len(b))
for i := range n {
if a[i] != b[i] {
@ -74,15 +74,10 @@ func isAncestor(x, y uint16) bool {
// isBitSet reports whether the bit at `index` in the byte slice `b` is set.
func isBitSet(b []byte, index int) bool {
return b[index/8]&(1<<(index%8)) != 0
}
// isByteSet reports whether the byte at `index` in the byte slice `b` is set.
func isByteSet(b []byte, index int) bool {
return b[index] != 0
return b[index/8]&(1<<(7-index%8)) != 0
}
// setBit sets the bit at `index` in the byte slice `b` to 1.
func setBit(b []byte, index int) {
b[index/8] |= 1 << (index % 8)
b[index/8] |= 1 << (7 - index%8)
}

View file

@ -17,6 +17,7 @@
package pathdb
import (
"bytes"
"testing"
)
@ -44,3 +45,37 @@ func TestIsAncestor(t *testing.T) {
}
}
}
func TestBitmapSet(t *testing.T) {
suites := []struct {
index int
expect []byte
}{
{
0, []byte{0b10000000, 0x0},
},
{
1, []byte{0b01000000, 0x0},
},
{
7, []byte{0b00000001, 0x0},
},
{
8, []byte{0b00000000, 0b10000000},
},
{
15, []byte{0b00000000, 0b00000001},
},
}
for _, tc := range suites {
var buf [2]byte
setBit(buf[:], tc.index)
if !bytes.Equal(buf[:], tc.expect) {
t.Fatalf("bitmap = %v, want %v", buf, tc.expect)
}
if !isBitSet(buf[:], tc.index) {
t.Fatal("bit is not set")
}
}
}