trie: make spongedb nicer to work with

This commit is contained in:
Martin Holst Swende 2023-10-05 11:11:23 +02:00
parent 13cdb5eaf7
commit 61354dcb8e
No known key found for this signature in database
GPG key ID: 683B438C05A5DDF0

View file

@ -787,6 +787,18 @@ type spongeDb struct {
journal []string journal []string
} }
func (s *spongeDb) PrettyPrint(t *testing.T) {
t.Helper()
limit := 4
for i := 0; i < len(s.journal); i++ {
if i == limit && len(s.journal) > 2+limit {
t.Logf("... omitting %d ops", len(s.journal)-3*limit)
i += len(s.journal) - 2*limit
}
t.Logf("op %d: %v", i, s.journal[i])
}
}
func (s *spongeDb) Has(key []byte) (bool, error) { panic("implement me") } func (s *spongeDb) Has(key []byte) (bool, error) { panic("implement me") }
func (s *spongeDb) Get(key []byte) ([]byte, error) { return nil, errors.New("no such elem") } func (s *spongeDb) Get(key []byte) ([]byte, error) { return nil, errors.New("no such elem") }
func (s *spongeDb) Delete(key []byte) error { panic("implement me") } func (s *spongeDb) Delete(key []byte) error { panic("implement me") }
@ -799,15 +811,17 @@ func (s *spongeDb) Close() error { return nil }
func (s *spongeDb) Put(key []byte, value []byte) error { func (s *spongeDb) Put(key []byte, value []byte) error {
var ( var (
keybrief = key keybrief = key
keybrief2 []byte
valbrief = value valbrief = value
) )
if len(keybrief) > 8 { if len(keybrief) > 8 {
keybrief = keybrief[:8] keybrief = keybrief[:8]
keybrief2 = key[len(key)-4:]
} }
if len(valbrief) > 8 { if len(valbrief) > 8 {
valbrief = valbrief[:8] valbrief = valbrief[:8]
} }
s.journal = append(s.journal, fmt.Sprintf("%v: PUT([%x...], [%d bytes] %x...)\n", s.id, keybrief, len(value), valbrief)) s.journal = append(s.journal, fmt.Sprintf("%v: PUT([%x...%x], [%d bytes] %x...)\n", s.id, keybrief, keybrief2, len(value), valbrief))
s.sponge.Write(key) s.sponge.Write(key)
s.sponge.Write(value) s.sponge.Write(value)
return nil return nil
@ -946,14 +960,10 @@ func TestCommitSequenceStackTrie(t *testing.T) {
} }
if got, exp := stackTrieSponge.sponge.Sum(nil), s.sponge.Sum(nil); !bytes.Equal(got, exp) { if got, exp := stackTrieSponge.sponge.Sum(nil), s.sponge.Sum(nil); !bytes.Equal(got, exp) {
// Show the journal // Show the journal
t.Logf("Expected:") t.Logf("Want:")
for i, v := range s.journal { s.PrettyPrint(t)
t.Logf("op %d: %v", i, v) t.Logf("Have:")
} stackTrieSponge.PrettyPrint(t)
t.Logf("Stacktrie:")
for i, v := range stackTrieSponge.journal {
t.Logf("op %d: %v", i, v)
}
t.Fatalf("test %d, disk write sequence wrong:\ngot %x exp %x\n", count, got, exp) t.Fatalf("test %d, disk write sequence wrong:\ngot %x exp %x\n", count, got, exp)
} }
} }