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 }