leveldb-rs-binding 0.8.7

An interface for leveldb
Documentation
use crate::utils::{db_put_simple, open_database, tmpdir};
use leveldb::iterator::Iterable;
use leveldb::iterator::LevelDBIterator;
use leveldb::options::ReadOptions;

#[test]
fn test_iterator() {
    let tmp = tmpdir("iter");
    let database = &mut open_database(tmp.path(), true);
    db_put_simple(database, 1, &[1]);
    db_put_simple(database, 2, &[2]);

    let read_opts = ReadOptions::new();
    let mut iter = database.iter(read_opts);

    let entry = iter.next();
    assert!(entry.is_some());
    assert_eq!(entry.unwrap(), (1, vec![1]));
    let entry2 = iter.next();
    assert!(entry2.is_some());
    assert_eq!(entry2.unwrap(), (2, vec![2]));
    assert!(iter.next().is_none());
}

#[test]
fn test_iterator_reverse() {
    let tmp = tmpdir("iter");
    let database = &mut open_database(tmp.path(), true);
    db_put_simple(database, 1, &[1]);
    db_put_simple(database, 2, &[2]);

    let read_opts = ReadOptions::new();
    let mut iter = database.iter(read_opts).reverse();

    let entry = iter.next();
    assert!(entry.is_some());
    assert_eq!(entry.unwrap(), (2, vec![2]));
    let entry2 = iter.next();
    assert!(entry2.is_some());
    assert_eq!(entry2.unwrap(), (1, vec![1]));
    assert!(iter.next().is_none());
}

#[test]
fn test_iterator_last() {
    let tmp = tmpdir("iter_last");
    let database = &mut open_database(tmp.path(), true);
    db_put_simple(database, 1, &[1]);
    db_put_simple(database, 2, &[2]);

    let read_opts = ReadOptions::new();
    let iter = database.iter(read_opts);

    assert!(iter.last().is_some());
}

#[test]
fn test_iterator_from_to() {
    let tmp = tmpdir("from_to");
    let database = &mut open_database(tmp.path(), true);
    db_put_simple(database, 1, &[1]);
    db_put_simple(database, 2, &[2]);
    db_put_simple(database, 3, &[3]);
    db_put_simple(database, 4, &[4]);
    db_put_simple(database, 5, &[5]);

    let from = 2;
    let to = 4;
    let read_opts = ReadOptions::new();
    let mut iter = database.iter(read_opts).from(&from).to(&to);

    assert_eq!(iter.next().unwrap(), (2, vec![2]));
    assert_eq!(iter.last().unwrap(), (4, vec![4]));
}

#[test]
fn test_key_iterator() {
    let tmp = tmpdir("key_iter");
    let database = &mut open_database(tmp.path(), true);
    db_put_simple(database, 1, &[1]);
    db_put_simple(database, 2, &[2]);

    let iterable: &mut dyn Iterable<i32> = database;

    let read_opts = ReadOptions::new();
    let mut iter = iterable.keys_iter(read_opts);
    let value = iter.next().unwrap();
    assert_eq!(value, 1);
}

#[test]
fn test_value_iterator() {
    let tmp = tmpdir("value_iter");
    let database = &mut open_database(tmp.path(), true);
    db_put_simple(database, 1, &[1]);
    db_put_simple(database, 2, &[2]);

    let iterable: &mut dyn Iterable<i32> = database;

    let read_opts = ReadOptions::new();
    let mut iter = iterable.value_iter(read_opts);
    let value = iter.next().unwrap();
    assert_eq!(value, vec![1]);
}