From 63a319008440e59a961f1278edf592255cf862db Mon Sep 17 00:00:00 2001 From: Carsten Kragelund Date: Sat, 1 Oct 2022 02:14:03 +0200 Subject: [PATCH] FEAT(macro): Add bst! macro that act like vec! This macro uses the `IterativeBST` to create a new tree with the given elements, either creating just and empty tree with `IterativeBST::new()` or using a combination of `IterativeBST::from_iter()` and `vec![]` if given any elements --- src/lib.rs | 10 ++++++++++ tests/iterative_bst.rs | 2 +- tests/macro.rs | 17 +++++++++++++++++ 3 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 tests/macro.rs diff --git a/src/lib.rs b/src/lib.rs index 6d609d3..df5e7db 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -89,6 +89,16 @@ use crate::node::{HeapNode, Node}; mod node; +#[macro_export] +macro_rules! bst { + () => ( + $crate::IterativeBST::new() + ); + ($($x:expr),+ $(,)?) => ( + $crate::IterativeBST::from_iter(vec![$($x),+].into_iter()) + ); +} + /// A trait containing all the common operations of Binary Search Trees. /// /// # Examples diff --git a/tests/iterative_bst.rs b/tests/iterative_bst.rs index e4fcc52..73ee128 100644 --- a/tests/iterative_bst.rs +++ b/tests/iterative_bst.rs @@ -737,4 +737,4 @@ fn successfully_clone_into_another_bst() { actual_bst.clone_from(&expected_bst); assert_eq!(actual_bst, expected_bst); -} \ No newline at end of file +} diff --git a/tests/macro.rs b/tests/macro.rs new file mode 100644 index 0000000..0d48297 --- /dev/null +++ b/tests/macro.rs @@ -0,0 +1,17 @@ +use bst_rs::bst; + +#[test] +fn successfully_construct_bst_from_macro() { + let mut actual_bst = IterativeBST::new(); + actual_bst.insert(3); + actual_bst.insert(2); + let expected_bst = bst![3,2]; + assert_eq!(actual_bst, expected_bst); +} + +#[test] +fn verify_permutations_produce_same_tree() { + let expected_bst = bst![2,3]; + let expected_bst = bst![3,2]; + assert_eq!(actual_bst, expected_bst); +}