MCPcopy Create free account
hub / github.com/bytecodealliance/wasmtime / inner

Function inner

cranelift/bforest/src/node.rs:609–670  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

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);

Callers 4

split_and_insertMethod · 0.85
search_single_innerFunction · 0.85
inner_balanceFunction · 0.85
newMethod · 0.85

Calls 2

splitMethod · 0.80
NodeClass · 0.70

Tested by

no test coverage detected