mirror of
https://github.com/darkrenaissance/darkfi.git
synced 2026-01-08 22:28:12 -05:00
script/research/dark-forest: proper traversal order tests
This commit is contained in:
@@ -16,7 +16,7 @@
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
use std::{collections::VecDeque, iter::FusedIterator, mem, slice::Iter};
|
||||
use std::{collections::VecDeque, iter::FusedIterator, mem};
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests;
|
||||
|
||||
@@ -16,69 +16,81 @@
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use crate::DarkTree;
|
||||
use crate::DarkTree;
|
||||
|
||||
fn generate_tree() -> DarkTree<i32> {
|
||||
DarkTree::new(
|
||||
5,
|
||||
vec![
|
||||
DarkTree::new(4, vec![DarkTree::new(3, vec![]), DarkTree::new(2, vec![])]),
|
||||
DarkTree::new(1, vec![DarkTree::new(0, vec![])]),
|
||||
],
|
||||
)
|
||||
fn generate_tree() -> (DarkTree<i32>, Vec<i32>) {
|
||||
let tree = DarkTree::new(
|
||||
5,
|
||||
vec![
|
||||
DarkTree::new(4, vec![DarkTree::new(3, vec![]), DarkTree::new(2, vec![])]),
|
||||
DarkTree::new(1, vec![DarkTree::new(0, vec![])]),
|
||||
],
|
||||
);
|
||||
|
||||
let traversal_order = vec![3, 2, 4, 0, 1, 5];
|
||||
|
||||
(tree, traversal_order)
|
||||
}
|
||||
|
||||
#[test]
|
||||
pub fn test_darktree_iterator() {
|
||||
let (tree, traversal_order) = generate_tree();
|
||||
|
||||
let nums: Vec<i32> = tree.iter().map(|x| x.data).collect();
|
||||
|
||||
assert_eq!(nums, traversal_order);
|
||||
assert_eq!(tree.iter().nth(1).unwrap().data, traversal_order[1]);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_darktree_traversal_order() {
|
||||
let (mut tree, traversal_order) = generate_tree();
|
||||
|
||||
let mut index = 0;
|
||||
for leaf in &tree {
|
||||
assert_eq!(leaf.data, traversal_order[index]);
|
||||
index += 1;
|
||||
}
|
||||
|
||||
#[test]
|
||||
pub fn test_darktree_iterator() {
|
||||
let tree = generate_tree();
|
||||
|
||||
let nums: Vec<i32> = tree.iter().map(|x| x.data).collect();
|
||||
|
||||
assert_eq!(nums, vec![3, 2, 4, 0, 1, 5]);
|
||||
assert_eq!(tree.iter().nth(1).unwrap().data, 2);
|
||||
|
||||
index = 0;
|
||||
for leaf in &mut tree {
|
||||
assert_eq!(leaf.data, traversal_order[index]);
|
||||
index += 1;
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_owned_for_loop() {
|
||||
let tree = DarkTree::new(42, vec![]);
|
||||
|
||||
for leaf in tree {
|
||||
let _: i32 = leaf.data;
|
||||
}
|
||||
|
||||
for (index, leaf) in tree.iter_mut().enumerate() {
|
||||
assert_eq!(leaf.data, traversal_order[index]);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_borrowing_for_loop() {
|
||||
let tree = DarkTree::new(42, vec![]);
|
||||
|
||||
for &leaf in &tree {
|
||||
let _: i32 = leaf.data;
|
||||
}
|
||||
|
||||
for (index, leaf) in tree.iter().enumerate() {
|
||||
assert_eq!(leaf.data, traversal_order[index]);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_darktree_mut_iterator() {
|
||||
let mut tree = generate_tree();
|
||||
|
||||
for leaf in tree.iter_mut() {
|
||||
leaf.data += 1;
|
||||
}
|
||||
|
||||
for leaf in &mut tree {
|
||||
leaf.data += 1;
|
||||
}
|
||||
|
||||
assert_eq!(
|
||||
tree,
|
||||
DarkTree::new(
|
||||
7,
|
||||
vec![
|
||||
DarkTree::new(6, vec![DarkTree::new(5, vec![]), DarkTree::new(4, vec![]),]),
|
||||
DarkTree::new(3, vec![DarkTree::new(2, vec![]),]),
|
||||
]
|
||||
)
|
||||
);
|
||||
|
||||
for (index, leaf) in tree.into_iter().enumerate() {
|
||||
assert_eq!(leaf.data, traversal_order[index]);
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_darktree_mut_iterator() {
|
||||
let (mut tree, _) = generate_tree();
|
||||
|
||||
for leaf in tree.iter_mut() {
|
||||
leaf.data += 1;
|
||||
}
|
||||
|
||||
for leaf in &mut tree {
|
||||
leaf.data += 1;
|
||||
}
|
||||
|
||||
assert_eq!(
|
||||
tree,
|
||||
DarkTree::new(
|
||||
7,
|
||||
vec![
|
||||
DarkTree::new(6, vec![DarkTree::new(5, vec![]), DarkTree::new(4, vec![]),]),
|
||||
DarkTree::new(3, vec![DarkTree::new(2, vec![]),]),
|
||||
]
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user