From 78263b9fd99f842812534652f77bff875e567e4f Mon Sep 17 00:00:00 2001 From: awskii Date: Wed, 1 Nov 2023 16:54:51 +0000 Subject: [PATCH] save test --- mdbx/cursor_test.go | 72 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) diff --git a/mdbx/cursor_test.go b/mdbx/cursor_test.go index 08676b4..e84ad21 100644 --- a/mdbx/cursor_test.go +++ b/mdbx/cursor_test.go @@ -3,6 +3,7 @@ package mdbx import ( "bytes" + "encoding/binary" "encoding/hex" "fmt" "os" @@ -730,6 +731,59 @@ func TestCursor_Del(t *testing.T) { } } +func TestDupCursor_SharedPRefix00(t *testing.T) { + env, _ := setup(t) + + var db DBI + err := env.Update(func(txn *Txn) (err error) { + db, err = txn.OpenDBI("testingdup", Create|DupSort, nil, nil) + if err != nil { + return err + } + cur, err := txn.OpenCursor(db) + if err != nil { + return err + } + defer cur.Close() + + // key with 00 prefix + tk := make([]byte, 10) + binary.BigEndian.PutUint64(tk[2:], 11) + if err = txn.Put(db, tk, []byte{4, 4, 0}, 0); err != nil { + panic(err) + } + if err = txn.Put(db, tk[2:], []byte{4, 7, 0}, 0); err != nil { + panic(err) + } + + k, v, err := cur.Get([]byte{}, []byte{}, First) + if err != nil { + panic(err) + } + if !bytes.Equal(k, tk[2:]) { + panic(fmt.Sprintf("unexpected first key %x", k)) + } + if !bytes.Equal(v, []byte{4, 7, 0}) { + panic(v) + } + + k, v, err = cur.Get([]byte{}, []byte{}, SetRange) + if err != nil { + panic(err) + } + if !bytes.Equal(k, tk[2:]) { + panic(fmt.Sprintf("unexpected first key %x", k)) + } + if !bytes.Equal(v, []byte{4, 7, 0}) { + panic(v) + } + return nil + }) + if err != nil { + t.Error(err) + } +} + func TestDupCursor_EmptyKeyValues(t *testing.T) { env, _ := setup(t) @@ -826,6 +880,24 @@ func TestDupCursor_EmptyKeyValues(t *testing.T) { panic(v) } + if err = txn.Put(db, []byte{0}, []byte{4}, 0); err != nil { + panic(err) + } + _, v, err = cur.Get([]byte{0}, []byte{}, SetRange) + if err != nil { + panic(err) + } + if !bytes.Equal(v, []byte{4}) { + panic(v) + } + _, v, err = cur.Get([]byte{}, []byte{}, First) + if err != nil { + panic(err) + } + if !bytes.Equal(v, []byte{}) { + panic(v) + } + // non-existing key _, v, err = cur.Get([]byte{7}, []byte{}, GetBoth) if err == nil {