// TestIterator tests the iterator func TestIterator(t *testing.T, db statedb.VersionedDB) { db.Open() defer db.Close() batch := statedb.NewUpdateBatch() batch.Put("ns1", "key1", []byte("value1"), version.NewHeight(1, 1)) batch.Put("ns1", "key2", []byte("value2"), version.NewHeight(1, 2)) batch.Put("ns1", "key3", []byte("value3"), version.NewHeight(1, 3)) batch.Put("ns1", "key4", []byte("value4"), version.NewHeight(1, 4)) batch.Put("ns2", "key5", []byte("value5"), version.NewHeight(1, 5)) batch.Put("ns2", "key6", []byte("value6"), version.NewHeight(1, 6)) batch.Put("ns3", "key7", []byte("value7"), version.NewHeight(1, 7)) savePoint := version.NewHeight(2, 5) db.ApplyUpdates(batch, savePoint) itr1, _ := db.GetStateRangeScanIterator("ns1", "key1", "") testItr(t, itr1, []string{"key1", "key2", "key3", "key4"}) itr2, _ := db.GetStateRangeScanIterator("ns1", "key2", "key3") testItr(t, itr2, []string{"key2"}) itr3, _ := db.GetStateRangeScanIterator("ns1", "", "") testItr(t, itr3, []string{"key1", "key2", "key3", "key4"}) itr4, _ := db.GetStateRangeScanIterator("ns2", "", "") testItr(t, itr4, []string{"key5", "key6"}) }