Skip to content

Commit

Permalink
add functional filter map tests + fix bug in it
Browse files Browse the repository at this point in the history
  • Loading branch information
glendc committed Apr 8, 2024
1 parent 2f417ad commit b4962ac
Show file tree
Hide file tree
Showing 2 changed files with 86 additions and 4 deletions.
8 changes: 4 additions & 4 deletions venndb-macros/src/generate_db.rs
Original file line number Diff line number Diff line change
Expand Up @@ -337,11 +337,11 @@ fn generate_db_struct_method_append(
let #filter_index = match self.#filter_map_name.entry(data.#name.clone()) {
::venndb::__internal::hash_map::Entry::Occupied(entry) => *entry.get(),
::venndb::__internal::hash_map::Entry::Vacant(entry) => {
let index = self.#filter_vec_name.len();
entry.insert(index);
let bv = ::venndb::__internal::BitVec::repeat(false, self.rows.len());
let vec_index = self.#filter_vec_name.len();
entry.insert(vec_index);
let bv = ::venndb::__internal::BitVec::repeat(false, index);
self.#filter_vec_name.push(bv);
index
vec_index
}
};
for (i, row) in self.#filter_vec_name.iter_mut().enumerate() {
Expand Down
82 changes: 82 additions & 0 deletions venndb-usage/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -443,4 +443,86 @@ mod tests {

assert!(results.filter(|r| r.is_admin).is_none());
}

#[test]
fn test_db_filter_map() {
let db = EmployeeDB::from_rows(vec![
Employee {
id: 1,
name: "Alice".to_string(),
is_manager: true,
is_admin: false,
is_active: true,
department: Department::Engineering,
},
Employee {
id: 2,
name: "Bob".to_string(),
is_manager: false,
is_admin: false,
is_active: true,
department: Department::Engineering,
},
Employee {
id: 3,
name: "Charlie".to_string(),
is_manager: true,
is_admin: true,
is_active: true,
department: Department::Sales,
},
Employee {
id: 4,
name: "David".to_string(),
is_manager: false,
is_admin: true,
is_active: true,
department: Department::HR,
},
Employee {
id: 5,
name: "Eve".to_string(),
is_manager: true,
is_admin: false,
is_active: true,
department: Department::HR,
},
])
.unwrap();

let mut query = db.query();
query.department(Department::Marketing);
assert!(query.execute().is_none());

query.reset().department(Department::Engineering);
let results = query.execute().unwrap().iter().collect::<Vec<_>>();
assert_eq!(results.len(), 2);
assert_eq!(results[0].id, 1);
assert_eq!(results[1].id, 2);

query.reset().department(Department::HR);
let results = query.execute().unwrap().iter().collect::<Vec<_>>();
assert_eq!(results.len(), 2);
assert_eq!(results[0].id, 4);
assert_eq!(results[1].id, 5);

query.reset().department(Department::Sales);
let results = query.execute().unwrap().iter().collect::<Vec<_>>();
assert_eq!(results.len(), 1);
assert_eq!(results[0].id, 3);

// all the filters
let results = query
.reset()
.department(Department::Engineering)
.is_manager(true)
.is_admin(false)
.is_active(true)
.execute()
.unwrap()
.iter()
.collect::<Vec<_>>();
assert_eq!(results.len(), 1);
assert_eq!(results[0].id, 1);
}
}

0 comments on commit b4962ac

Please sign in to comment.