@@ -246,3 +246,53 @@ func TestIterator_Error(t *testing.T) {
246246 assert .False (t , iter .Valid ())
247247 iter .Close ()
248248}
249+
250+ func TestIterator_UseTwice (t * testing.T ) {
251+ options := DefaultOptions
252+ db , err := Open (options )
253+ assert .Nil (t , err )
254+ defer destroyDB (db )
255+
256+ db .Put ([]byte ("aceds" ), []byte ("value1" ))
257+ db .Put ([]byte ("eedsq" ), []byte ("value2" ))
258+ db .Put ([]byte ("sedas" ), []byte ("value3" ))
259+ db .Put ([]byte ("efeds" ), []byte ("value4" ))
260+ db .Put ([]byte ("bbdes" ), []byte ("value5" ))
261+
262+ iteratorOptions := DefaultIteratorOptions
263+ iter := db .NewIterator (iteratorOptions )
264+
265+ for iter .Seek ([]byte ("bbe" )); iter .Valid (); iter .Next () {
266+ item := iter .Item ()
267+ assert .NotNil (t , item )
268+ }
269+
270+ // rewind and iterate again
271+ iter .Rewind ()
272+ assert .Equal (t , iter .Valid (), true )
273+ for iter .Seek ([]byte ("bbe" )); iter .Valid (); iter .Next () {
274+ item := iter .Item ()
275+ assert .NotNil (t , item )
276+ }
277+ }
278+
279+ func TestIterator_UseAfterClose (t * testing.T ) {
280+ options := DefaultOptions
281+ db , err := Open (options )
282+ assert .Nil (t , err )
283+ defer destroyDB (db )
284+
285+ db .Put ([]byte ("aceds" ), []byte ("value1" ))
286+ db .Put ([]byte ("eedsq" ), []byte ("value2" ))
287+
288+ iteratorOptions := DefaultIteratorOptions
289+ iter := db .NewIterator (iteratorOptions )
290+
291+ for iter .Seek ([]byte ("bbe" )); iter .Valid (); iter .Next () {
292+ item := iter .Item ()
293+ assert .NotNil (t , item )
294+ }
295+
296+ iter .Close ()
297+ assert .Equal (t , iter .Valid (), false )
298+ }
0 commit comments