use microrm::prelude::*;
use test_log::test;
mod common;
#[derive(Clone, Entity, PartialEq)]
struct USizeContainer {
value: usize,
}
#[derive(Clone, Entity, PartialEq)]
struct StringContainer {
value: String,
}
#[derive(Schema)]
struct Schema {
usize_containers: microrm::IDMap<USizeContainer>,
string_containers: microrm::IDMap<StringContainer>,
}
#[test]
fn filter_lt() {
let (pool, db): (_, Schema) = common::open_test_db!();
{
let mut txn = pool.start().unwrap();
db.usize_containers
.insert(&mut txn, USizeContainer { value: 5 })
.unwrap();
db.usize_containers
.insert(&mut txn, USizeContainer { value: 4 })
.unwrap();
db.usize_containers
.insert(&mut txn, USizeContainer { value: 9 })
.unwrap();
db.usize_containers
.insert(&mut txn, USizeContainer { value: 7 })
.unwrap();
txn.commit().unwrap();
}
{
let mut txn = pool.start().unwrap();
assert_eq!(
db.usize_containers
.filter_lt(USizeContainer::Value, 6usize)
.count(&mut txn)
.unwrap(),
2
);
}
{
let mut txn = pool.start().unwrap();
assert_eq!(
db.usize_containers
.with(USizeContainer::Value, 4usize)
.filter_lt(USizeContainer::Value, 10usize)
.count(&mut txn)
.unwrap(),
1
);
assert_eq!(
db.usize_containers
.filter_lt(USizeContainer::Value, 10usize)
.with(USizeContainer::Value, 4usize)
.count(&mut txn)
.unwrap(),
1
);
}
}
#[test]
fn filter_glob() {
let (pool, db): (_, Schema) = common::open_test_db!();
{
let mut txn = pool.start().unwrap();
db.string_containers
.insert_ref(&mut txn, StringContainerRef { value: "abc" })
.unwrap();
db.string_containers
.insert_ref(&mut txn, StringContainerRef { value: "abcd" })
.unwrap();
db.string_containers
.insert_ref(&mut txn, StringContainerRef { value: "bcde" })
.unwrap();
db.string_containers
.insert_ref(&mut txn, StringContainerRef { value: "cdef" })
.unwrap();
txn.commit().unwrap();
}
{
let mut txn = pool.start().unwrap();
assert_eq!(
db.string_containers
.filter_glob(StringContainer::Value, "????")
.count(&mut txn)
.unwrap(),
3
);
assert_eq!(
db.string_containers
.filter_glob(StringContainer::Value, "a*")
.count(&mut txn)
.unwrap(),
2
);
assert_eq!(
db.string_containers
.filter_glob(StringContainer::Value, "b*")
.count(&mut txn)
.unwrap(),
1
);
}
}
#[cfg(feature = "regex")]
#[test]
fn filter_regex() {
let (pool, db): (_, Schema) = common::open_test_db!();
{
let mut txn = pool.start().unwrap();
db.string_containers
.insert_ref(&mut txn, StringContainerRef { value: "abc" })
.unwrap();
db.string_containers
.insert_ref(&mut txn, StringContainerRef { value: "abcd" })
.unwrap();
db.string_containers
.insert_ref(&mut txn, StringContainerRef { value: "bcde" })
.unwrap();
db.string_containers
.insert_ref(&mut txn, StringContainerRef { value: "cdef" })
.unwrap();
txn.commit().unwrap();
}
{
let mut txn = pool.start().unwrap();
assert_eq!(
db.string_containers
.filter_regex(StringContainer::Value, "...")
.count(&mut txn)
.unwrap(),
4
);
assert_eq!(
db.string_containers
.filter_regex(StringContainer::Value, "....")
.count(&mut txn)
.unwrap(),
3
);
assert_eq!(
db.string_containers
.filter_regex(StringContainer::Value, "^[ab]")
.count(&mut txn)
.unwrap(),
3
);
assert_eq!(
db.string_containers
.filter_regex(StringContainer::Value, "^[ab]$")
.count(&mut txn)
.unwrap(),
0
);
}
}