| 731 | |
| 732 | #[test] |
| 733 | fn inner_balance() { |
| 734 | let n1 = Node(1); |
| 735 | let n2 = Node(2); |
| 736 | let n3 = Node(3); |
| 737 | let mut lhs = NodeData::<TF>::inner(n1, 'a', n2); |
| 738 | assert!(lhs.try_inner_insert(1, 'b', n3)); |
| 739 | assert_eq!(lhs.to_string(), "[ node1 a node2 b node3 ]"); |
| 740 | |
| 741 | let n11 = Node(11); |
| 742 | let n12 = Node(12); |
| 743 | let mut rhs = NodeData::<TF>::inner(n11, 'p', n12); |
| 744 | |
| 745 | for i in 1..4 { |
| 746 | assert!(rhs.try_inner_insert( |
| 747 | usize::from(i), |
| 748 | ('p' as u8 + i) as char, |
| 749 | Node(i as u32 + 12), |
| 750 | )); |
| 751 | } |
| 752 | assert_eq!( |
| 753 | rhs.to_string(), |
| 754 | "[ node11 p node12 q node13 r node14 s node15 ]" |
| 755 | ); |
| 756 | |
| 757 | // 3+5 elements fit in RHS. |
| 758 | assert_eq!(lhs.balance('o', &mut rhs), None); |
| 759 | assert_eq!( |
| 760 | rhs.to_string(), |
| 761 | "[ node1 a node2 b node3 o node11 p node12 q node13 r node14 s node15 ]" |
| 762 | ); |
| 763 | |
| 764 | // 2+8 elements are redistributed. |
| 765 | lhs = NodeData::<TF>::inner(Node(20), 'x', Node(21)); |
| 766 | assert_eq!(lhs.balance('y', &mut rhs), Some('o')); |
| 767 | assert_eq!( |
| 768 | lhs.to_string(), |
| 769 | "[ node20 x node21 y node1 a node2 b node3 ]" |
| 770 | ); |
| 771 | assert_eq!( |
| 772 | rhs.to_string(), |
| 773 | "[ node11 p node12 q node13 r node14 s node15 ]" |
| 774 | ); |
| 775 | } |
| 776 | |
| 777 | #[test] |
| 778 | fn leaf_balance() { |