]> git.proxmox.com Git - rustc.git/blame - compiler/rustc_data_structures/src/tiny_list/tests.rs
New upstream version 1.68.2+dfsg1
[rustc.git] / compiler / rustc_data_structures / src / tiny_list / tests.rs
CommitLineData
416331ca
XL
1use super::*;
2
3extern crate test;
dfeec247 4use test::{black_box, Bencher};
416331ca 5
6a06907d
XL
6impl<T> TinyList<T> {
7 fn len(&self) -> usize {
8 let (mut elem, mut count) = (self.head.as_ref(), 0);
9c376795 9 while let Some(e) = elem {
6a06907d
XL
10 count += 1;
11 elem = e.next.as_deref();
12 }
13 count
14 }
15}
16
416331ca
XL
17#[test]
18fn test_contains_and_insert() {
dfeec247 19 fn do_insert(i: u32) -> bool {
416331ca
XL
20 i % 2 == 0
21 }
22
23 let mut list = TinyList::new();
24
dfeec247
XL
25 for i in 0..10 {
26 for j in 0..i {
416331ca
XL
27 if do_insert(j) {
28 assert!(list.contains(&j));
29 } else {
30 assert!(!list.contains(&j));
31 }
32 }
33
34 assert!(!list.contains(&i));
35
36 if do_insert(i) {
37 list.insert(i);
38 assert!(list.contains(&i));
39 }
40 }
41}
42
43#[test]
44fn test_remove_first() {
45 let mut list = TinyList::new();
46 list.insert(1);
47 list.insert(2);
48 list.insert(3);
49 list.insert(4);
50 assert_eq!(list.len(), 4);
51
52 assert!(list.remove(&4));
53 assert!(!list.contains(&4));
54
55 assert_eq!(list.len(), 3);
56 assert!(list.contains(&1));
57 assert!(list.contains(&2));
58 assert!(list.contains(&3));
59}
60
61#[test]
62fn test_remove_last() {
63 let mut list = TinyList::new();
64 list.insert(1);
65 list.insert(2);
66 list.insert(3);
67 list.insert(4);
68 assert_eq!(list.len(), 4);
69
70 assert!(list.remove(&1));
71 assert!(!list.contains(&1));
72
73 assert_eq!(list.len(), 3);
74 assert!(list.contains(&2));
75 assert!(list.contains(&3));
76 assert!(list.contains(&4));
77}
78
79#[test]
80fn test_remove_middle() {
81 let mut list = TinyList::new();
82 list.insert(1);
83 list.insert(2);
84 list.insert(3);
85 list.insert(4);
86 assert_eq!(list.len(), 4);
87
88 assert!(list.remove(&2));
89 assert!(!list.contains(&2));
90
91 assert_eq!(list.len(), 3);
92 assert!(list.contains(&1));
93 assert!(list.contains(&3));
94 assert!(list.contains(&4));
95}
96
97#[test]
98fn test_remove_single() {
99 let mut list = TinyList::new();
100 list.insert(1);
101 assert_eq!(list.len(), 1);
102
103 assert!(list.remove(&1));
104 assert!(!list.contains(&1));
105
106 assert_eq!(list.len(), 0);
107}
108
109#[bench]
110fn bench_insert_empty(b: &mut Bencher) {
111 b.iter(|| {
e1599b0c 112 let mut list = black_box(TinyList::new());
416331ca 113 list.insert(1);
e1599b0c 114 list
416331ca
XL
115 })
116}
117
118#[bench]
119fn bench_insert_one(b: &mut Bencher) {
120 b.iter(|| {
e1599b0c 121 let mut list = black_box(TinyList::new_single(0));
416331ca 122 list.insert(1);
e1599b0c 123 list
416331ca
XL
124 })
125}
126
e1599b0c
XL
127#[bench]
128fn bench_contains_empty(b: &mut Bencher) {
dfeec247 129 b.iter(|| black_box(TinyList::new()).contains(&1));
e1599b0c
XL
130}
131
132#[bench]
133fn bench_contains_unknown(b: &mut Bencher) {
dfeec247 134 b.iter(|| black_box(TinyList::new_single(0)).contains(&1));
e1599b0c
XL
135}
136
137#[bench]
138fn bench_contains_one(b: &mut Bencher) {
dfeec247 139 b.iter(|| black_box(TinyList::new_single(1)).contains(&1));
e1599b0c
XL
140}
141
416331ca
XL
142#[bench]
143fn bench_remove_empty(b: &mut Bencher) {
dfeec247 144 b.iter(|| black_box(TinyList::new()).remove(&1));
416331ca
XL
145}
146
147#[bench]
148fn bench_remove_unknown(b: &mut Bencher) {
dfeec247 149 b.iter(|| black_box(TinyList::new_single(0)).remove(&1));
416331ca
XL
150}
151
152#[bench]
153fn bench_remove_one(b: &mut Bencher) {
dfeec247 154 b.iter(|| black_box(TinyList::new_single(1)).remove(&1));
416331ca 155}