()
| 607 | |
| 608 | #[test] |
| 609 | fn inner() { |
| 610 | let n1 = Node(1); |
| 611 | let n2 = Node(2); |
| 612 | let n3 = Node(3); |
| 613 | let n4 = Node(4); |
| 614 | let mut inner = NodeData::<TF>::inner(n1, 'c', n4); |
| 615 | assert_eq!(mem::size_of_val(&inner), 64); |
| 616 | assert_eq!(inner.to_string(), "[ node1 c node4 ]"); |
| 617 | |
| 618 | assert!(inner.try_inner_insert(0, 'a', n2)); |
| 619 | assert_eq!(inner.to_string(), "[ node1 a node2 c node4 ]"); |
| 620 | |
| 621 | assert!(inner.try_inner_insert(1, 'b', n3)); |
| 622 | assert_eq!(inner.to_string(), "[ node1 a node2 b node3 c node4 ]"); |
| 623 | |
| 624 | for i in 3..7 { |
| 625 | assert!(inner.try_inner_insert( |
| 626 | usize::from(i), |
| 627 | ('a' as u8 + i) as char, |
| 628 | Node(i as u32 + 2), |
| 629 | )); |
| 630 | } |
| 631 | assert_eq!( |
| 632 | inner.to_string(), |
| 633 | "[ node1 a node2 b node3 c node4 d node5 e node6 f node7 g node8 ]" |
| 634 | ); |
| 635 | |
| 636 | // Now the node is full and insertion should fail anywhere. |
| 637 | assert!(!inner.try_inner_insert(0, 'x', n3)); |
| 638 | assert!(!inner.try_inner_insert(4, 'x', n3)); |
| 639 | assert!(!inner.try_inner_insert(7, 'x', n3)); |
| 640 | |
| 641 | // Splitting should be independent of the hint because we have an even number of node |
| 642 | // references. |
| 643 | let saved = inner; |
| 644 | let sp = inner.split(1); |
| 645 | assert_eq!(sp.lhs_entries, 4); |
| 646 | assert_eq!(sp.rhs_entries, 4); |
| 647 | assert_eq!(sp.crit_key, 'd'); |
| 648 | // The critical key is not present in either of the resulting nodes. |
| 649 | assert_eq!(inner.to_string(), "[ node1 a node2 b node3 c node4 ]"); |
| 650 | assert_eq!(sp.rhs_data.to_string(), "[ node5 e node6 f node7 g node8 ]"); |
| 651 | |
| 652 | assert_eq!(inner.inner_remove(0), Removed::Underflow); |
| 653 | assert_eq!(inner.to_string(), "[ node2 b node3 c node4 ]"); |
| 654 | |
| 655 | assert_eq!(inner.inner_remove(1), Removed::Underflow); |
| 656 | assert_eq!(inner.to_string(), "[ node2 c node4 ]"); |
| 657 | |
| 658 | assert_eq!(inner.inner_remove(1), Removed::Underflow); |
| 659 | assert_eq!(inner.to_string(), "[ node2 ]"); |
| 660 | |
| 661 | assert_eq!(inner.inner_remove(0), Removed::Empty); |
| 662 | |
| 663 | inner = saved; |
| 664 | let sp = inner.split(6); |
| 665 | assert_eq!(sp.lhs_entries, 4); |
| 666 | assert_eq!(sp.rhs_entries, 4); |
no test coverage detected