use microrm::prelude::*;
use test_log::test;
mod common;
#[derive(Clone, Entity, PartialEq)]
struct Container {
value: usize,
}
#[derive(Schema)]
struct Schema {
containers: microrm::IDMap<Container>,
}
fn simple_test_data(txn: &mut microrm::Transaction, db: &Schema) {
db.containers.insert(txn, Container { value: 5 }).unwrap();
db.containers.insert(txn, Container { value: 4 }).unwrap();
db.containers.insert(txn, Container { value: 9 }).unwrap();
db.containers.insert(txn, Container { value: 7 }).unwrap();
}
#[test]
fn simple_iter() {
let (pool, db): (_, Schema) = common::open_test_db!();
let mut txn = pool.start().unwrap();
simple_test_data(&mut txn, &db);
let mut it = db
.containers
.order_by_asc(Container::Value)
.iter(&mut txn)
.expect("an iterator");
let v = it
.next()
.expect("first result")
.expect("valid first result");
assert_eq!(v.value, 4);
let v = it
.next()
.expect("second result")
.expect("valid second result");
assert_eq!(v.value, 5);
let v = it
.next()
.expect("third result")
.expect("valid third result");
assert_eq!(v.value, 7);
let v = it
.next()
.expect("fourth result")
.expect("valid fourth result");
assert_eq!(v.value, 9);
assert!(it.next().is_none());
}
#[test]
fn borrow_iter() {
let (pool, db): (_, Schema) = common::open_test_db!();
let mut txn = pool.start().unwrap();
simple_test_data(&mut txn, &db);
let mut values = vec![];
db.containers
.order_by_asc(Container::Value)
.iter_refs(&mut txn, |c| {
values.push(c.value);
std::ops::ControlFlow::Continue(())
})
.expect("iteration failed");
assert_eq!(values, vec![4, 5, 7, 9]);
}