1use crate::behaviors::RemoveBehavior;
2use crate::node::Node;
3use crate::node::NodeRef;
4use crate::tree::Tree;
5use crate::NodeId;
6
7#[derive(Debug, PartialEq)]
11pub struct NodeMut<'a, T> {
12 node_id: NodeId,
13 tree: &'a mut Tree<T>,
14}
15
16impl<'a, T> NodeMut<'a, T> {
17 pub(crate) fn new(node_id: NodeId, tree: &mut Tree<T>) -> NodeMut<T> {
18 NodeMut { node_id, tree }
19 }
20
21 pub fn node_id(&self) -> NodeId {
37 self.node_id
38 }
39
40 pub fn data(&mut self) -> &mut T {
59 if let Some(node) = self.tree.get_node_mut(self.node_id) {
60 &mut node.data
61 } else {
62 unreachable!()
63 }
64 }
65
66 pub fn parent(&mut self) -> Option<NodeMut<T>> {
80 self.get_self_as_node()
81 .relatives
82 .parent
83 .map(move |id| NodeMut::new(id, self.tree))
84 }
85
86 pub fn prev_sibling(&mut self) -> Option<NodeMut<T>> {
100 self.get_self_as_node()
101 .relatives
102 .prev_sibling
103 .map(move |id| NodeMut::new(id, self.tree))
104 }
105
106 pub fn next_sibling(&mut self) -> Option<NodeMut<T>> {
120 self.get_self_as_node()
121 .relatives
122 .next_sibling
123 .map(move |id| NodeMut::new(id, self.tree))
124 }
125
126 pub fn first_child(&mut self) -> Option<NodeMut<T>> {
140 self.get_self_as_node()
141 .relatives
142 .first_child
143 .map(move |id| NodeMut::new(id, self.tree))
144 }
145
146 pub fn last_child(&mut self) -> Option<NodeMut<T>> {
160 self.get_self_as_node()
161 .relatives
162 .last_child
163 .map(move |id| NodeMut::new(id, self.tree))
164 }
165
166 pub fn append(&mut self, data: T) -> NodeMut<T> {
191 let new_id = self.tree.core_tree.insert(data);
192
193 let relatives = self.tree.get_node_relatives(self.node_id);
194
195 let prev_sibling = relatives.last_child;
196 self.tree.set_parent(new_id, Some(self.node_id));
197 self.tree.set_prev_sibling(new_id, prev_sibling);
198
199 let first_child = relatives.first_child.or_else(|| Some(new_id));
200 self.tree.set_first_child(self.node_id, first_child);
201 self.tree.set_last_child(self.node_id, Some(new_id));
202
203 if let Some(node_id) = prev_sibling {
204 self.tree.set_next_sibling(node_id, Some(new_id));
205 }
206
207 NodeMut::new(new_id, self.tree)
208 }
209
210 pub fn prepend(&mut self, data: T) -> NodeMut<T> {
235 let new_id = self.tree.core_tree.insert(data);
236
237 let relatives = self.tree.get_node_relatives(self.node_id);
238
239 let next_sibling = relatives.first_child;
240 self.tree.set_parent(new_id, Some(self.node_id));
241 self.tree.set_next_sibling(new_id, next_sibling);
242
243 let last_child = relatives.last_child.or_else(|| Some(new_id));
244 self.tree.set_first_child(self.node_id, Some(new_id));
245 self.tree.set_last_child(self.node_id, last_child);
246
247 if let Some(node_id) = next_sibling {
248 self.tree.set_prev_sibling(node_id, Some(new_id));
249 }
250
251 NodeMut::new(new_id, self.tree)
252 }
253
254 pub fn remove_first(&mut self, behavior: RemoveBehavior) -> Option<T> {
284 let relatives = self.tree.get_node_relatives(self.node_id);
286 let first = relatives.first_child;
287 let first_id = first?;
288 self.tree.remove(first_id, behavior)
289 }
290
291 pub fn remove_last(&mut self, behavior: RemoveBehavior) -> Option<T> {
321 let relatives = self.tree.get_node_relatives(self.node_id);
323 let last = relatives.last_child;
324 let last_id = last?;
325 self.tree.remove(last_id, behavior)
326 }
327
328 pub fn as_ref(&self) -> NodeRef<T> {
344 NodeRef::new(self.node_id, self.tree)
345 }
346
347 pub fn swap_next_sibling(&mut self) -> bool {
408 let node_id = self.node_id();
409 let prev_id = self.tree.get_node_prev_sibling_id(node_id);
410 let next_id = self.tree.get_node_next_sibling_id(node_id);
411 if let Some(next_id) = next_id {
412 if let Some(parent_id) = self.parent().map(|parent| parent.node_id()) {
413 let (set_first, set_last) = {
414 let parent = self.tree.get(parent_id).unwrap();
415 (
416 node_id == parent.first_child().unwrap().node_id(),
417 next_id == parent.last_child().unwrap().node_id(),
418 )
419 };
420 if set_first {
421 self.tree.set_first_child(parent_id, Some(next_id));
422 }
423 if set_last {
424 self.tree.set_last_child(parent_id, Some(node_id));
425 }
426 }
427 let new_next_id = self.tree.get_node_next_sibling_id(next_id);
428 self.tree
429 .set_prev_siblings_next_sibling(node_id, Some(next_id));
430 self.tree.set_next_siblings_prev_sibling(node_id, prev_id);
431 self.tree.set_prev_sibling(node_id, Some(next_id));
432 self.tree.set_next_sibling(node_id, new_next_id);
433 self.tree
434 .set_prev_siblings_next_sibling(node_id, Some(node_id));
435 self.tree
436 .set_next_siblings_prev_sibling(node_id, Some(node_id));
437 true
438 } else {
439 false
440 }
441 }
442
443 pub fn swap_prev_sibling(&mut self) -> bool {
504 let node_id = self.node_id();
505 let prev_id = self.tree.get_node_prev_sibling_id(node_id);
506 let next_id = self.tree.get_node_next_sibling_id(node_id);
507 if let Some(prev_id) = prev_id {
508 if let Some(parent_id) = self.parent().map(|parent| parent.node_id()) {
509 let (set_first, set_last) = {
510 let parent = self.tree.get(parent_id).unwrap();
511 (
512 prev_id == parent.first_child().unwrap().node_id(),
513 node_id == parent.last_child().unwrap().node_id(),
514 )
515 };
516 if set_first {
517 self.tree.set_first_child(parent_id, Some(node_id));
518 }
519 if set_last {
520 self.tree.set_last_child(parent_id, Some(prev_id));
521 }
522 }
523 let new_prev_id = self.tree.get_node_prev_sibling_id(prev_id);
524 self.tree.set_prev_siblings_next_sibling(node_id, next_id);
525 self.tree
526 .set_next_siblings_prev_sibling(node_id, Some(prev_id));
527 self.tree.set_prev_sibling(node_id, new_prev_id);
528 self.tree.set_next_sibling(node_id, Some(prev_id));
529 self.tree
530 .set_prev_siblings_next_sibling(node_id, Some(node_id));
531 self.tree
532 .set_next_siblings_prev_sibling(node_id, Some(node_id));
533 true
534 } else {
535 false
536 }
537 }
538
539 pub fn make_last_sibling(&mut self) -> bool {
586 if let Some(parent_id) = self.parent().map(|parent| parent.node_id()) {
587 let node_id = self.node_id();
588 let prev_id = self.tree.get_node_prev_sibling_id(node_id);
589 let next_id = self.tree.get_node_next_sibling_id(node_id);
590 let last_id = self
591 .tree
592 .get(parent_id)
593 .unwrap()
594 .last_child()
595 .unwrap()
596 .node_id();
597 let first_id = self
598 .tree
599 .get(parent_id)
600 .unwrap()
601 .first_child()
602 .unwrap()
603 .node_id();
604 if node_id != last_id {
605 self.tree.set_last_child(parent_id, Some(node_id));
606 if node_id == first_id {
607 self.tree.set_first_child(parent_id, next_id);
608 }
609 self.tree.set_next_sibling(last_id, Some(node_id));
610 self.tree.set_prev_siblings_next_sibling(node_id, next_id);
611 self.tree.set_next_siblings_prev_sibling(node_id, prev_id);
612 self.tree.set_prev_sibling(node_id, Some(last_id));
613 self.tree.set_next_sibling(node_id, None);
614 true
615 } else {
616 false
617 }
618 } else {
619 false
620 }
621 }
622
623 pub fn make_first_sibling(&mut self) -> bool {
669 if let Some(parent_id) = self.parent().map(|parent| parent.node_id()) {
670 let node_id = self.node_id();
671 let prev_id = self.tree.get_node_prev_sibling_id(node_id);
672 let next_id = self.tree.get_node_next_sibling_id(node_id);
673 let first_id = self
674 .tree
675 .get(parent_id)
676 .unwrap()
677 .first_child()
678 .unwrap()
679 .node_id();
680 let last_id = self
681 .tree
682 .get(parent_id)
683 .unwrap()
684 .last_child()
685 .unwrap()
686 .node_id();
687 if node_id != first_id {
688 self.tree.set_first_child(parent_id, Some(node_id));
689 if node_id == last_id {
690 self.tree.set_last_child(parent_id, prev_id);
691 }
692 self.tree.set_prev_sibling(first_id, Some(node_id));
693 self.tree.set_prev_siblings_next_sibling(node_id, next_id);
694 self.tree.set_next_siblings_prev_sibling(node_id, prev_id);
695 self.tree.set_next_sibling(node_id, Some(first_id));
696 self.tree.set_prev_sibling(node_id, None);
697 true
698 } else {
699 false
700 }
701 } else {
702 false
703 }
704 }
705
706 fn get_self_as_node(&self) -> &Node<T> {
707 if let Some(node) = self.tree.get_node(self.node_id) {
708 &node
709 } else {
710 unreachable!()
711 }
712 }
713}
714
715#[cfg_attr(tarpaulin, skip)]
716#[cfg(test)]
717mod node_mut_tests {
718 use crate::behaviors::RemoveBehavior::{DropChildren, OrphanChildren};
719 use crate::tree::Tree;
720
721 #[test]
722 fn node_id() {
723 let mut tree = Tree::new();
724 tree.set_root(1);
725 let root_id = tree.root_id().expect("root doesn't exist?");
726
727 let root_mut = tree.get_mut(root_id).unwrap();
728 assert_eq!(root_id, root_mut.node_id());
729 }
730
731 #[test]
732 fn data() {
733 let mut tree = Tree::new();
734 tree.set_root(1);
735 let root_id = tree.root_id().expect("root doesn't exist?");
736
737 let mut root_mut = tree.get_mut(root_id).unwrap();
738 assert_eq!(root_mut.data(), &mut 1);
739
740 *root_mut.data() = 2;
741 assert_eq!(root_mut.data(), &mut 2);
742 }
743
744 #[test]
745 fn parent() {
746 let mut tree = Tree::new();
747 tree.set_root(1);
748 let root_id = tree.root_id().expect("root doesn't exist?");
749 let mut root_mut = tree.get_mut(root_id).unwrap();
750 assert!(root_mut.parent().is_none());
751 }
752
753 #[test]
754 fn prev_sibling() {
755 let mut tree = Tree::new();
756 tree.set_root(1);
757 let root_id = tree.root_id().expect("root doesn't exist?");
758 let mut root_mut = tree.get_mut(root_id).unwrap();
759 assert!(root_mut.prev_sibling().is_none());
760 }
761
762 #[test]
763 fn next_sibling() {
764 let mut tree = Tree::new();
765 tree.set_root(1);
766 let root_id = tree.root_id().expect("root doesn't exist?");
767 let mut root_mut = tree.get_mut(root_id).unwrap();
768 assert!(root_mut.next_sibling().is_none());
769 }
770
771 #[test]
772 fn first_child() {
773 let mut tree = Tree::new();
774 tree.set_root(1);
775 let root_id = tree.root_id().expect("root doesn't exist?");
776 let mut root_mut = tree.get_mut(root_id).unwrap();
777 assert!(root_mut.first_child().is_none());
778 }
779
780 #[test]
781 fn last_child() {
782 let mut tree = Tree::new();
783 tree.set_root(1);
784 let root_id = tree.root_id().expect("root doesn't exist?");
785 let mut root_mut = tree.get_mut(root_id).unwrap();
786 assert!(root_mut.last_child().is_none());
787 }
788
789 #[test]
790 fn append_no_children_present() {
791 let mut tree = Tree::new();
792 tree.set_root(1);
793 let root_id = tree.root_id().expect("root doesn't exist?");
794
795 let mut root_mut = tree.get_mut(root_id).unwrap();
796 let new_id = root_mut.append(2).node_id();
797
798 let root_node = tree.get_node(root_id);
799 assert!(root_node.is_some());
800
801 let root_node = root_node.unwrap();
802 assert_eq!(root_node.relatives.first_child, Some(new_id));
803 assert_eq!(root_node.relatives.last_child, Some(new_id));
804
805 let new_node = tree.get_node(new_id);
806 assert!(new_node.is_some());
807
808 let new_node = new_node.unwrap();
809 assert_eq!(new_node.relatives.parent, Some(root_id));
810 assert_eq!(new_node.relatives.prev_sibling, None);
811 assert_eq!(new_node.relatives.next_sibling, None);
812 assert_eq!(new_node.relatives.first_child, None);
813 assert_eq!(new_node.relatives.last_child, None);
814
815 let root = tree.get(root_id).unwrap();
816 assert_eq!(root.data(), &1);
817
818 let new_node = root.first_child().unwrap();
819 assert_eq!(new_node.data(), &2);
820 }
821
822 #[test]
823 fn append_single_child_present() {
824 let mut tree = Tree::new();
825 tree.set_root(1);
826 let root_id = tree.root_id().expect("root doesn't exist?");
827
828 let mut root_mut = tree.get_mut(root_id).unwrap();
829 let new_id = root_mut.append(2).node_id();
830 let new_id_2 = root_mut.append(3).node_id();
831
832 let root_node = tree.get_node(root_id);
833 assert!(root_node.is_some());
834
835 let root_node = root_node.unwrap();
836 assert_eq!(root_node.relatives.first_child, Some(new_id));
837 assert_eq!(root_node.relatives.last_child, Some(new_id_2));
838
839 let new_node = tree.get_node(new_id);
840 assert!(new_node.is_some());
841
842 let new_node = new_node.unwrap();
843 assert_eq!(new_node.relatives.parent, Some(root_id));
844 assert_eq!(new_node.relatives.prev_sibling, None);
845 assert_eq!(new_node.relatives.next_sibling, Some(new_id_2));
846 assert_eq!(new_node.relatives.first_child, None);
847 assert_eq!(new_node.relatives.last_child, None);
848
849 let new_node_2 = tree.get_node(new_id_2);
850 assert!(new_node_2.is_some());
851
852 let new_node_2 = new_node_2.unwrap();
853 assert_eq!(new_node_2.relatives.parent, Some(root_id));
854 assert_eq!(new_node_2.relatives.prev_sibling, Some(new_id));
855 assert_eq!(new_node_2.relatives.next_sibling, None);
856 assert_eq!(new_node_2.relatives.first_child, None);
857 assert_eq!(new_node_2.relatives.last_child, None);
858
859 let root = tree.get(root_id).unwrap();
860 assert_eq!(root.data(), &1);
861
862 let new_node = root.first_child().unwrap();
863 assert_eq!(new_node.data(), &2);
864
865 let new_node_2 = root.last_child().unwrap();
866 assert_eq!(new_node_2.data(), &3);
867 }
868
869 #[test]
870 fn append_two_children_present() {
871 let mut tree = Tree::new();
872 tree.set_root(1);
873 let root_id = tree.root_id().expect("root doesn't exist?");
874
875 let mut root_mut = tree.get_mut(root_id).unwrap();
876 let new_id = root_mut.append(2).node_id();
877 let new_id_2 = root_mut.append(3).node_id();
878 let new_id_3 = root_mut.append(4).node_id();
879
880 let root_node = tree.get_node(root_id);
881 assert!(root_node.is_some());
882
883 let root_node = root_node.unwrap();
884 assert_eq!(root_node.relatives.first_child, Some(new_id));
885 assert_eq!(root_node.relatives.last_child, Some(new_id_3));
886
887 let new_node = tree.get_node(new_id);
888 assert!(new_node.is_some());
889
890 let new_node = new_node.unwrap();
891 assert_eq!(new_node.relatives.parent, Some(root_id));
892 assert_eq!(new_node.relatives.prev_sibling, None);
893 assert_eq!(new_node.relatives.next_sibling, Some(new_id_2));
894 assert_eq!(new_node.relatives.first_child, None);
895 assert_eq!(new_node.relatives.last_child, None);
896
897 let new_node_2 = tree.get_node(new_id_2);
898 assert!(new_node_2.is_some());
899
900 let new_node_2 = new_node_2.unwrap();
901 assert_eq!(new_node_2.relatives.parent, Some(root_id));
902 assert_eq!(new_node_2.relatives.prev_sibling, Some(new_id));
903 assert_eq!(new_node_2.relatives.next_sibling, Some(new_id_3));
904 assert_eq!(new_node_2.relatives.first_child, None);
905 assert_eq!(new_node_2.relatives.last_child, None);
906
907 let new_node_3 = tree.get_node(new_id_3);
908 assert!(new_node_3.is_some());
909
910 let new_node_3 = new_node_3.unwrap();
911 assert_eq!(new_node_3.relatives.parent, Some(root_id));
912 assert_eq!(new_node_3.relatives.prev_sibling, Some(new_id_2));
913 assert_eq!(new_node_3.relatives.next_sibling, None);
914 assert_eq!(new_node_3.relatives.first_child, None);
915 assert_eq!(new_node_3.relatives.last_child, None);
916
917 let root = tree.get(root_id).unwrap();
918 assert_eq!(root.data(), &1);
919
920 let new_node = root.first_child().unwrap();
922 let new_node_2 = new_node.next_sibling().unwrap();
923 let new_node_3 = new_node_2.next_sibling().unwrap();
924 assert_eq!(new_node.data(), &2);
925 assert_eq!(new_node_2.data(), &3);
926 assert_eq!(new_node_3.data(), &4);
927
928 let new_node_3 = root.last_child().unwrap();
930 let new_node_2 = new_node_3.prev_sibling().unwrap();
931 let new_node = new_node_2.prev_sibling().unwrap();
932 assert_eq!(new_node_3.data(), &4);
933 assert_eq!(new_node_2.data(), &3);
934 assert_eq!(new_node.data(), &2);
935 }
936
937 #[test]
938 fn prepend_no_children_present() {
939 let mut tree = Tree::new();
940 tree.set_root(1);
941 let root_id = tree.root_id().expect("root doesn't exist?");
942
943 let mut root_mut = tree.get_mut(root_id).unwrap();
944 let new_id = root_mut.prepend(2).node_id();
945
946 let root_node = tree.get_node(root_id);
947 assert!(root_node.is_some());
948
949 let root_node = root_node.unwrap();
950 assert_eq!(root_node.relatives.first_child, Some(new_id));
951 assert_eq!(root_node.relatives.last_child, Some(new_id));
952
953 let new_node = tree.get_node(new_id);
954 assert!(new_node.is_some());
955
956 let new_node = new_node.unwrap();
957 assert_eq!(new_node.relatives.parent, Some(root_id));
958 assert_eq!(new_node.relatives.prev_sibling, None);
959 assert_eq!(new_node.relatives.next_sibling, None);
960 assert_eq!(new_node.relatives.first_child, None);
961 assert_eq!(new_node.relatives.last_child, None);
962
963 let root = tree.get(root_id).unwrap();
964 assert_eq!(root.data(), &1);
965
966 let new_node = root.first_child().unwrap();
967 assert_eq!(new_node.data(), &2);
968 }
969
970 #[test]
971 fn prepend_single_child_present() {
972 let mut tree = Tree::new();
973 tree.set_root(1);
974 let root_id = tree.root_id().expect("root doesn't exist?");
975
976 let mut root_mut = tree.get_mut(root_id).unwrap();
977 let new_id = root_mut.prepend(2).node_id();
978 let new_id_2 = root_mut.prepend(3).node_id();
979
980 let root_node = tree.get_node(root_id);
981 assert!(root_node.is_some());
982
983 let root_node = root_node.unwrap();
984 assert_eq!(root_node.relatives.first_child, Some(new_id_2));
985 assert_eq!(root_node.relatives.last_child, Some(new_id));
986
987 let new_node = tree.get_node(new_id);
988 assert!(new_node.is_some());
989
990 let new_node = new_node.unwrap();
991 assert_eq!(new_node.relatives.parent, Some(root_id));
992 assert_eq!(new_node.relatives.prev_sibling, Some(new_id_2));
993 assert_eq!(new_node.relatives.next_sibling, None);
994 assert_eq!(new_node.relatives.first_child, None);
995 assert_eq!(new_node.relatives.last_child, None);
996
997 let new_node_2 = tree.get_node(new_id_2);
998 assert!(new_node_2.is_some());
999
1000 let new_node_2 = new_node_2.unwrap();
1001 assert_eq!(new_node_2.relatives.parent, Some(root_id));
1002 assert_eq!(new_node_2.relatives.prev_sibling, None);
1003 assert_eq!(new_node_2.relatives.next_sibling, Some(new_id));
1004 assert_eq!(new_node_2.relatives.first_child, None);
1005 assert_eq!(new_node_2.relatives.last_child, None);
1006
1007 let root = tree.get(root_id).unwrap();
1008 assert_eq!(root.data(), &1);
1009
1010 let new_node = root.first_child().unwrap();
1011 assert_eq!(new_node.data(), &3);
1012
1013 let new_node_2 = root.last_child().unwrap();
1014 assert_eq!(new_node_2.data(), &2);
1015 }
1016
1017 #[test]
1018 fn prepend_two_children_present() {
1019 let mut tree = Tree::new();
1020 tree.set_root(1);
1021 let root_id = tree.root_id().expect("root doesn't exist?");
1022
1023 let mut root_mut = tree.get_mut(root_id).unwrap();
1024 let new_id = root_mut.prepend(2).node_id();
1025 let new_id_2 = root_mut.prepend(3).node_id();
1026 let new_id_3 = root_mut.prepend(4).node_id();
1027
1028 let root_node = tree.get_node(root_id);
1029 assert!(root_node.is_some());
1030
1031 let root_node = root_node.unwrap();
1032 assert_eq!(root_node.relatives.first_child, Some(new_id_3));
1033 assert_eq!(root_node.relatives.last_child, Some(new_id));
1034
1035 let new_node = tree.get_node(new_id);
1036 assert!(new_node.is_some());
1037
1038 let new_node = new_node.unwrap();
1039 assert_eq!(new_node.relatives.parent, Some(root_id));
1040 assert_eq!(new_node.relatives.prev_sibling, Some(new_id_2));
1041 assert_eq!(new_node.relatives.next_sibling, None);
1042 assert_eq!(new_node.relatives.first_child, None);
1043 assert_eq!(new_node.relatives.last_child, None);
1044
1045 let new_node_2 = tree.get_node(new_id_2);
1046 assert!(new_node_2.is_some());
1047
1048 let new_node_2 = new_node_2.unwrap();
1049 assert_eq!(new_node_2.relatives.parent, Some(root_id));
1050 assert_eq!(new_node_2.relatives.prev_sibling, Some(new_id_3));
1051 assert_eq!(new_node_2.relatives.next_sibling, Some(new_id));
1052 assert_eq!(new_node_2.relatives.first_child, None);
1053 assert_eq!(new_node_2.relatives.last_child, None);
1054
1055 let new_node_3 = tree.get_node(new_id_3);
1056 assert!(new_node_3.is_some());
1057
1058 let new_node_3 = new_node_3.unwrap();
1059 assert_eq!(new_node_3.relatives.parent, Some(root_id));
1060 assert_eq!(new_node_3.relatives.prev_sibling, None);
1061 assert_eq!(new_node_3.relatives.next_sibling, Some(new_id_2));
1062 assert_eq!(new_node_3.relatives.first_child, None);
1063 assert_eq!(new_node_3.relatives.last_child, None);
1064
1065 let root = tree.get(root_id).unwrap();
1066 assert_eq!(root.data(), &1);
1067
1068 let new_node_3 = root.first_child().unwrap();
1070 let new_node_2 = new_node_3.next_sibling().unwrap();
1071 let new_node = new_node_2.next_sibling().unwrap();
1072 assert_eq!(new_node_3.data(), &4);
1073 assert_eq!(new_node_2.data(), &3);
1074 assert_eq!(new_node.data(), &2);
1075
1076 let new_node = root.last_child().unwrap();
1078 let new_node_2 = new_node.prev_sibling().unwrap();
1079 let new_node_3 = new_node_2.prev_sibling().unwrap();
1080 assert_eq!(new_node.data(), &2);
1081 assert_eq!(new_node_2.data(), &3);
1082 assert_eq!(new_node_3.data(), &4);
1083 }
1084
1085 #[test]
1086 fn remove_first_no_children_present() {
1087 let mut tree = Tree::new();
1088 tree.set_root(1);
1089 let root_id = tree.root_id().expect("root doesn't exist?");
1090
1091 let mut root_mut = tree.get_mut(root_id).unwrap();
1092 let first_child_data = root_mut.remove_first(DropChildren);
1093 assert_eq!(first_child_data, None);
1094
1095 let root_node = tree.get_node(root_id);
1096 assert!(root_node.is_some());
1097
1098 let root_node = root_node.unwrap();
1099 assert_eq!(root_node.relatives.first_child, None);
1100 assert_eq!(root_node.relatives.last_child, None);
1101 }
1102
1103 #[test]
1104 fn remove_first_drop_single_child_present() {
1105 let mut tree = Tree::new();
1106 tree.set_root(1);
1107 let root_id = tree.root_id().expect("root doesn't exist?");
1108
1109 let mut root_mut = tree.get_mut(root_id).unwrap();
1110 let two_id = root_mut.append(2).node_id();
1111
1112 let removed = root_mut.remove_first(DropChildren);
1113 assert_eq!(removed, Some(2));
1114
1115 let root_node = tree.get_node(root_id);
1116 assert!(root_node.is_some());
1117
1118 let root_node = root_node.unwrap();
1119 assert_eq!(root_node.relatives.first_child, None);
1120 assert_eq!(root_node.relatives.last_child, None);
1121
1122 let two = tree.get_node(two_id);
1123 assert!(two.is_none());
1124 }
1125
1126 #[test]
1127 fn remove_first_drop_two_children_present() {
1128 let mut tree = Tree::new();
1129 tree.set_root(1);
1130 let root_id = tree.root_id().expect("root doesn't exist?");
1131
1132 let mut root_mut = tree.get_mut(root_id).unwrap();
1133 root_mut.append(2);
1134 let three_id = root_mut.append(3).node_id();
1135
1136 let removed = root_mut.remove_first(DropChildren);
1137 assert_eq!(removed, Some(2));
1138
1139 let root_node = tree.get_node(root_id);
1140 assert!(root_node.is_some());
1141
1142 let root_node = root_node.unwrap();
1143 assert_eq!(root_node.relatives.first_child, Some(three_id));
1144 assert_eq!(root_node.relatives.last_child, Some(three_id));
1145
1146 let three = tree.get_node(three_id);
1147 assert!(three.is_some());
1148
1149 let three = three.unwrap();
1150 assert_eq!(three.relatives.parent, Some(root_id));
1151 assert_eq!(three.relatives.prev_sibling, None);
1152 assert_eq!(three.relatives.next_sibling, None);
1153 assert_eq!(three.relatives.first_child, None);
1154 assert_eq!(three.relatives.last_child, None);
1155 }
1156
1157 #[test]
1158 fn remove_first_drop_three_children_present() {
1159 let mut tree = Tree::new();
1160 tree.set_root(1);
1161 let root_id = tree.root_id().expect("root doesn't exist?");
1162
1163 let mut root_mut = tree.get_mut(root_id).unwrap();
1164 root_mut.append(2);
1165 let three_id = root_mut.append(3).node_id();
1166 let four_id = root_mut.append(4).node_id();
1167
1168 let removed = root_mut.remove_first(DropChildren);
1169 assert_eq!(removed, Some(2));
1170
1171 let root_node = tree.get_node(root_id);
1172 assert!(root_node.is_some());
1173
1174 let root_node = root_node.unwrap();
1175 assert_eq!(root_node.relatives.first_child, Some(three_id));
1176 assert_eq!(root_node.relatives.last_child, Some(four_id));
1177
1178 let three = tree.get_node(three_id);
1179 assert!(three.is_some());
1180
1181 let three = three.unwrap();
1182 assert_eq!(three.relatives.parent, Some(root_id));
1183 assert_eq!(three.relatives.prev_sibling, None);
1184 assert_eq!(three.relatives.next_sibling, Some(four_id));
1185 assert_eq!(three.relatives.first_child, None);
1186 assert_eq!(three.relatives.last_child, None);
1187
1188 let four = tree.get_node(four_id);
1189 assert!(four.is_some());
1190
1191 let four = four.unwrap();
1192 assert_eq!(four.relatives.parent, Some(root_id));
1193 assert_eq!(four.relatives.prev_sibling, Some(three_id));
1194 assert_eq!(four.relatives.next_sibling, None);
1195 assert_eq!(four.relatives.first_child, None);
1196 assert_eq!(four.relatives.last_child, None);
1197 }
1198
1199 #[test]
1200 fn remove_first_drop_grandchild_present() {
1201 let mut tree = Tree::new();
1202 tree.set_root(1);
1203 let root_id = tree.root_id().expect("root doesn't exist?");
1204
1205 let mut root_mut = tree.get_mut(root_id).unwrap();
1206 let three_id = root_mut.append(2).append(3).node_id();
1207
1208 let removed = root_mut.remove_first(DropChildren);
1209 assert_eq!(removed, Some(2));
1210
1211 let root_node = tree.get_node(root_id);
1212 assert!(root_node.is_some());
1213
1214 let root_node = root_node.unwrap();
1215 assert_eq!(root_node.relatives.first_child, None);
1216 assert_eq!(root_node.relatives.last_child, None);
1217
1218 let three = tree.get_node(three_id);
1219 assert!(three.is_none());
1220 }
1221
1222 #[test]
1223 fn remove_first_orphan_grandchild_present() {
1224 let mut tree = Tree::new();
1225 tree.set_root(1);
1226 let root_id = tree.root_id().expect("root doesn't exist?");
1227
1228 let mut root_mut = tree.get_mut(root_id).unwrap();
1229 let three_id = root_mut.append(2).append(3).node_id();
1230
1231 let removed = root_mut.remove_first(OrphanChildren);
1232 assert_eq!(removed, Some(2));
1233
1234 let root_node = tree.get_node(root_id);
1235 assert!(root_node.is_some());
1236
1237 let root_node = root_node.unwrap();
1238 assert_eq!(root_node.relatives.first_child, None);
1239 assert_eq!(root_node.relatives.last_child, None);
1240
1241 let three = tree.get_node(three_id);
1242 assert!(three.is_some());
1243
1244 let three = three.unwrap();
1245 assert_eq!(three.relatives.parent, None);
1246 }
1247
1248 #[test]
1249 fn remove_last_no_children_present() {
1250 let mut tree = Tree::new();
1251 tree.set_root(1);
1252 let root_id = tree.root_id().expect("root doesn't exist?");
1253
1254 let mut root_mut = tree.get_mut(root_id).unwrap();
1255 let removed = root_mut.remove_last(DropChildren);
1256 assert_eq!(removed, None);
1257
1258 let root_node = tree.get_node(root_id);
1259 assert!(root_node.is_some());
1260
1261 let root_node = root_node.unwrap();
1262 assert_eq!(root_node.relatives.first_child, None);
1263 assert_eq!(root_node.relatives.last_child, None);
1264 }
1265
1266 #[test]
1267 fn remove_last_single_child_present() {
1268 let mut tree = Tree::new();
1269 tree.set_root(1);
1270 let root_id = tree.root_id().expect("root doesn't exist?");
1271
1272 let mut root_mut = tree.get_mut(root_id).unwrap();
1273 root_mut.append(2);
1274 let removed = root_mut.remove_last(DropChildren);
1275 assert_eq!(removed, Some(2));
1276
1277 let root_node = tree.get_node(root_id);
1278 assert!(root_node.is_some());
1279
1280 let root_node = root_node.unwrap();
1281 assert_eq!(root_node.relatives.first_child, None);
1282 assert_eq!(root_node.relatives.last_child, None);
1283 }
1284
1285 #[test]
1286 fn remove_last_two_children_present() {
1287 let mut tree = Tree::new();
1288 tree.set_root(1);
1289 let root_id = tree.root_id().expect("root doesn't exist?");
1290
1291 let mut root_mut = tree.get_mut(root_id).unwrap();
1292 let two_id = root_mut.append(2).node_id();
1293 root_mut.append(3);
1294
1295 let removed = root_mut.remove_last(DropChildren);
1296 assert_eq!(removed, Some(3));
1297
1298 let root_node = tree.get_node(root_id);
1299 assert!(root_node.is_some());
1300
1301 let root_node = root_node.unwrap();
1302 assert_eq!(root_node.relatives.first_child, Some(two_id));
1303 assert_eq!(root_node.relatives.last_child, Some(two_id));
1304
1305 let two = tree.get_node(two_id);
1306 assert!(two.is_some());
1307
1308 let two = two.unwrap();
1309 assert_eq!(two.relatives.parent, Some(root_id));
1310 assert_eq!(two.relatives.prev_sibling, None);
1311 assert_eq!(two.relatives.next_sibling, None);
1312 assert_eq!(two.relatives.first_child, None);
1313 assert_eq!(two.relatives.last_child, None);
1314 }
1315
1316 #[test]
1317 fn remove_last_three_children_present() {
1318 let mut tree = Tree::new();
1319 tree.set_root(1);
1320 let root_id = tree.root_id().expect("root doesn't exist?");
1321
1322 let mut root_mut = tree.get_mut(root_id).unwrap();
1323 let two_id = root_mut.append(2).node_id();
1324 let three_id = root_mut.append(3).node_id();
1325 root_mut.append(4);
1326
1327 let removed = root_mut.remove_last(DropChildren);
1328 assert_eq!(removed, Some(4));
1329
1330 let root_node = tree.get_node(root_id);
1331 assert!(root_node.is_some());
1332
1333 let root_node = root_node.unwrap();
1334 assert_eq!(root_node.relatives.first_child, Some(two_id));
1335 assert_eq!(root_node.relatives.last_child, Some(three_id));
1336
1337 let two = tree.get_node(two_id);
1338 assert!(two.is_some());
1339
1340 let two = two.unwrap();
1341 assert_eq!(two.relatives.parent, Some(root_id));
1342 assert_eq!(two.relatives.prev_sibling, None);
1343 assert_eq!(two.relatives.next_sibling, Some(three_id));
1344 assert_eq!(two.relatives.first_child, None);
1345 assert_eq!(two.relatives.last_child, None);
1346
1347 let three = tree.get_node(three_id);
1348 assert!(three.is_some());
1349
1350 let three = three.unwrap();
1351 assert_eq!(three.relatives.parent, Some(root_id));
1352 assert_eq!(three.relatives.prev_sibling, Some(two_id));
1353 assert_eq!(three.relatives.next_sibling, None);
1354 assert_eq!(three.relatives.first_child, None);
1355 assert_eq!(three.relatives.last_child, None);
1356 }
1357
1358 #[test]
1359 fn remove_last_orphan_grandchild_present() {
1360 let mut tree = Tree::new();
1361 tree.set_root(1);
1362 let root_id = tree.root_id().expect("root doesn't exist?");
1363
1364 let mut root_mut = tree.get_mut(root_id).unwrap();
1365 let three_id = root_mut.append(2).append(3).node_id();
1366
1367 let removed = root_mut.remove_last(OrphanChildren);
1368 assert_eq!(removed, Some(2));
1369
1370 let root_node = tree.get_node(root_id);
1371 assert!(root_node.is_some());
1372
1373 let root_node = root_node.unwrap();
1374 assert_eq!(root_node.relatives.first_child, None);
1375 assert_eq!(root_node.relatives.last_child, None);
1376
1377 let three = tree.get_node(three_id);
1378 assert!(three.is_some());
1379
1380 let three = three.unwrap();
1381 assert_eq!(three.relatives.parent, None);
1382 }
1383}