| 861 | |
| 862 | #[test] |
| 863 | fn append_block() { |
| 864 | let mut layout = Layout::new(); |
| 865 | let e0 = Block::new(0); |
| 866 | let e1 = Block::new(1); |
| 867 | let e2 = Block::new(2); |
| 868 | |
| 869 | { |
| 870 | let imm = &layout; |
| 871 | assert!(!imm.is_block_inserted(e0)); |
| 872 | assert!(!imm.is_block_inserted(e1)); |
| 873 | } |
| 874 | verify(&mut layout, &[]); |
| 875 | |
| 876 | layout.append_block(e1); |
| 877 | assert!(!layout.is_block_inserted(e0)); |
| 878 | assert!(layout.is_block_inserted(e1)); |
| 879 | assert!(!layout.is_block_inserted(e2)); |
| 880 | let v: Vec<Block> = layout.blocks().collect(); |
| 881 | assert_eq!(v, [e1]); |
| 882 | |
| 883 | layout.append_block(e2); |
| 884 | assert!(!layout.is_block_inserted(e0)); |
| 885 | assert!(layout.is_block_inserted(e1)); |
| 886 | assert!(layout.is_block_inserted(e2)); |
| 887 | let v: Vec<Block> = layout.blocks().collect(); |
| 888 | assert_eq!(v, [e1, e2]); |
| 889 | |
| 890 | layout.append_block(e0); |
| 891 | assert!(layout.is_block_inserted(e0)); |
| 892 | assert!(layout.is_block_inserted(e1)); |
| 893 | assert!(layout.is_block_inserted(e2)); |
| 894 | let v: Vec<Block> = layout.blocks().collect(); |
| 895 | assert_eq!(v, [e1, e2, e0]); |
| 896 | |
| 897 | { |
| 898 | let imm = &layout; |
| 899 | let mut v = Vec::new(); |
| 900 | for e in imm { |
| 901 | v.push(e); |
| 902 | } |
| 903 | assert_eq!(v, [e1, e2, e0]); |
| 904 | } |
| 905 | |
| 906 | // Test cursor positioning. |
| 907 | let mut cur = LayoutCursor::new(&mut layout); |
| 908 | assert_eq!(cur.position(), CursorPosition::Nowhere); |
| 909 | assert_eq!(cur.next_inst(), None); |
| 910 | assert_eq!(cur.position(), CursorPosition::Nowhere); |
| 911 | assert_eq!(cur.prev_inst(), None); |
| 912 | assert_eq!(cur.position(), CursorPosition::Nowhere); |
| 913 | |
| 914 | assert_eq!(cur.next_block(), Some(e1)); |
| 915 | assert_eq!(cur.position(), CursorPosition::Before(e1)); |
| 916 | assert_eq!(cur.next_inst(), None); |
| 917 | assert_eq!(cur.position(), CursorPosition::After(e1)); |
| 918 | assert_eq!(cur.next_inst(), None); |
| 919 | assert_eq!(cur.position(), CursorPosition::After(e1)); |
| 920 | assert_eq!(cur.next_block(), Some(e2)); |