github.com/gnolang/gno@v0.0.0-20240520182011-228e9d0192ce/tm2/pkg/db/prefix_db_test.go (about)

     1  package db_test
     2  
     3  import (
     4  	"testing"
     5  
     6  	dbm "github.com/gnolang/gno/tm2/pkg/db"
     7  	"github.com/gnolang/gno/tm2/pkg/db/memdb"
     8  )
     9  
    10  func mockDBWithStuff() dbm.DB {
    11  	db := memdb.NewMemDB()
    12  	// Under "key" prefix
    13  	db.Set(bz("key"), bz("value"))
    14  	db.Set(bz("key1"), bz("value1"))
    15  	db.Set(bz("key2"), bz("value2"))
    16  	db.Set(bz("key3"), bz("value3"))
    17  	db.Set(bz("something"), bz("else"))
    18  	db.Set(bz(""), bz(""))
    19  	db.Set(bz("k"), bz("val"))
    20  	db.Set(bz("ke"), bz("valu"))
    21  	db.Set(bz("kee"), bz("valuu"))
    22  	return db
    23  }
    24  
    25  func TestPrefixDBSimple(t *testing.T) {
    26  	t.Parallel()
    27  
    28  	db := mockDBWithStuff()
    29  	pdb := dbm.NewPrefixDB(db, bz("key"))
    30  
    31  	checkValue(t, pdb, bz("key"), nil)
    32  	checkValue(t, pdb, bz(""), bz("value"))
    33  	checkValue(t, pdb, bz("key1"), nil)
    34  	checkValue(t, pdb, bz("1"), bz("value1"))
    35  	checkValue(t, pdb, bz("key2"), nil)
    36  	checkValue(t, pdb, bz("2"), bz("value2"))
    37  	checkValue(t, pdb, bz("key3"), nil)
    38  	checkValue(t, pdb, bz("3"), bz("value3"))
    39  	checkValue(t, pdb, bz("something"), nil)
    40  	checkValue(t, pdb, bz("k"), nil)
    41  	checkValue(t, pdb, bz("ke"), nil)
    42  	checkValue(t, pdb, bz("kee"), nil)
    43  }
    44  
    45  func TestPrefixDBIterator1(t *testing.T) {
    46  	t.Parallel()
    47  
    48  	db := mockDBWithStuff()
    49  	pdb := dbm.NewPrefixDB(db, bz("key"))
    50  
    51  	itr := pdb.Iterator(nil, nil)
    52  	checkDomain(t, itr, nil, nil)
    53  	checkItem(t, itr, bz(""), bz("value"))
    54  	checkNext(t, itr, true)
    55  	checkItem(t, itr, bz("1"), bz("value1"))
    56  	checkNext(t, itr, true)
    57  	checkItem(t, itr, bz("2"), bz("value2"))
    58  	checkNext(t, itr, true)
    59  	checkItem(t, itr, bz("3"), bz("value3"))
    60  	checkNext(t, itr, false)
    61  	checkInvalid(t, itr)
    62  	itr.Close()
    63  }
    64  
    65  func TestPrefixDBIterator2(t *testing.T) {
    66  	t.Parallel()
    67  
    68  	db := mockDBWithStuff()
    69  	pdb := dbm.NewPrefixDB(db, bz("key"))
    70  
    71  	itr := pdb.Iterator(nil, bz(""))
    72  	checkDomain(t, itr, nil, bz(""))
    73  	checkInvalid(t, itr)
    74  	itr.Close()
    75  }
    76  
    77  func TestPrefixDBIterator3(t *testing.T) {
    78  	t.Parallel()
    79  
    80  	db := mockDBWithStuff()
    81  	pdb := dbm.NewPrefixDB(db, bz("key"))
    82  
    83  	itr := pdb.Iterator(bz(""), nil)
    84  	checkDomain(t, itr, bz(""), nil)
    85  	checkItem(t, itr, bz(""), bz("value"))
    86  	checkNext(t, itr, true)
    87  	checkItem(t, itr, bz("1"), bz("value1"))
    88  	checkNext(t, itr, true)
    89  	checkItem(t, itr, bz("2"), bz("value2"))
    90  	checkNext(t, itr, true)
    91  	checkItem(t, itr, bz("3"), bz("value3"))
    92  	checkNext(t, itr, false)
    93  	checkInvalid(t, itr)
    94  	itr.Close()
    95  }
    96  
    97  func TestPrefixDBIterator4(t *testing.T) {
    98  	t.Parallel()
    99  
   100  	db := mockDBWithStuff()
   101  	pdb := dbm.NewPrefixDB(db, bz("key"))
   102  
   103  	itr := pdb.Iterator(bz(""), bz(""))
   104  	checkDomain(t, itr, bz(""), bz(""))
   105  	checkInvalid(t, itr)
   106  	itr.Close()
   107  }
   108  
   109  func TestPrefixDBReverseIterator1(t *testing.T) {
   110  	t.Parallel()
   111  
   112  	db := mockDBWithStuff()
   113  	pdb := dbm.NewPrefixDB(db, bz("key"))
   114  
   115  	itr := pdb.ReverseIterator(nil, nil)
   116  	checkDomain(t, itr, nil, nil)
   117  	checkItem(t, itr, bz("3"), bz("value3"))
   118  	checkNext(t, itr, true)
   119  	checkItem(t, itr, bz("2"), bz("value2"))
   120  	checkNext(t, itr, true)
   121  	checkItem(t, itr, bz("1"), bz("value1"))
   122  	checkNext(t, itr, true)
   123  	checkItem(t, itr, bz(""), bz("value"))
   124  	checkNext(t, itr, false)
   125  	checkInvalid(t, itr)
   126  	itr.Close()
   127  }
   128  
   129  func TestPrefixDBReverseIterator2(t *testing.T) {
   130  	t.Parallel()
   131  
   132  	db := mockDBWithStuff()
   133  	pdb := dbm.NewPrefixDB(db, bz("key"))
   134  
   135  	itr := pdb.ReverseIterator(bz(""), nil)
   136  	checkDomain(t, itr, bz(""), nil)
   137  	checkItem(t, itr, bz("3"), bz("value3"))
   138  	checkNext(t, itr, true)
   139  	checkItem(t, itr, bz("2"), bz("value2"))
   140  	checkNext(t, itr, true)
   141  	checkItem(t, itr, bz("1"), bz("value1"))
   142  	checkNext(t, itr, true)
   143  	checkItem(t, itr, bz(""), bz("value"))
   144  	checkNext(t, itr, false)
   145  	checkInvalid(t, itr)
   146  	itr.Close()
   147  }
   148  
   149  func TestPrefixDBReverseIterator3(t *testing.T) {
   150  	t.Parallel()
   151  
   152  	db := mockDBWithStuff()
   153  	pdb := dbm.NewPrefixDB(db, bz("key"))
   154  
   155  	itr := pdb.ReverseIterator(nil, bz(""))
   156  	checkDomain(t, itr, nil, bz(""))
   157  	checkInvalid(t, itr)
   158  	itr.Close()
   159  }
   160  
   161  func TestPrefixDBReverseIterator4(t *testing.T) {
   162  	t.Parallel()
   163  
   164  	db := mockDBWithStuff()
   165  	pdb := dbm.NewPrefixDB(db, bz("key"))
   166  
   167  	itr := pdb.ReverseIterator(bz(""), bz(""))
   168  	checkDomain(t, itr, bz(""), bz(""))
   169  	checkInvalid(t, itr)
   170  	itr.Close()
   171  }
   172  
   173  func TestPrefixDBReverseIterator5(t *testing.T) {
   174  	t.Parallel()
   175  
   176  	db := mockDBWithStuff()
   177  	pdb := dbm.NewPrefixDB(db, bz("key"))
   178  
   179  	itr := pdb.ReverseIterator(bz("1"), nil)
   180  	checkDomain(t, itr, bz("1"), nil)
   181  	checkItem(t, itr, bz("3"), bz("value3"))
   182  	checkNext(t, itr, true)
   183  	checkItem(t, itr, bz("2"), bz("value2"))
   184  	checkNext(t, itr, true)
   185  	checkItem(t, itr, bz("1"), bz("value1"))
   186  	checkNext(t, itr, false)
   187  	checkInvalid(t, itr)
   188  	itr.Close()
   189  }
   190  
   191  func TestPrefixDBReverseIterator6(t *testing.T) {
   192  	t.Parallel()
   193  
   194  	db := mockDBWithStuff()
   195  	pdb := dbm.NewPrefixDB(db, bz("key"))
   196  
   197  	itr := pdb.ReverseIterator(bz("2"), nil)
   198  	checkDomain(t, itr, bz("2"), nil)
   199  	checkItem(t, itr, bz("3"), bz("value3"))
   200  	checkNext(t, itr, true)
   201  	checkItem(t, itr, bz("2"), bz("value2"))
   202  	checkNext(t, itr, false)
   203  	checkInvalid(t, itr)
   204  	itr.Close()
   205  }
   206  
   207  func TestPrefixDBReverseIterator7(t *testing.T) {
   208  	t.Parallel()
   209  
   210  	db := mockDBWithStuff()
   211  	pdb := dbm.NewPrefixDB(db, bz("key"))
   212  
   213  	itr := pdb.ReverseIterator(nil, bz("2"))
   214  	checkDomain(t, itr, nil, bz("2"))
   215  	checkItem(t, itr, bz("1"), bz("value1"))
   216  	checkNext(t, itr, true)
   217  	checkItem(t, itr, bz(""), bz("value"))
   218  	checkNext(t, itr, false)
   219  	checkInvalid(t, itr)
   220  	itr.Close()
   221  }