1mod index;
2mod iter;
3
4use flux_attrs::*;
5
6#[extern_spec(core::slice)]
7impl<T> [T] {
8 #[sig(fn(&Self[@n]) -> usize[n])]
9 fn len(&self) -> usize;
10
11 #[sig(fn(&Self[@n]) -> bool[n == 0])]
12 fn is_empty(&self) -> bool;
13
14 #[sig(fn(&Self[@n]) -> Option<&T>[n != 0])]
15 fn first(&self) -> Option<&T>;
16
17 #[sig(fn(&Self[@n]) -> Iter<T>[0, n])]
18 fn iter(&self) -> Iter<'_, T>;
19}
20
21#[cfg(flux_sysroot_test)]
22mod tests {
23 #![allow(dead_code)]
24
25 use flux_attrs::*;
26
27 #[sig(fn(bool[true]))]
28 fn assert(_: bool) {}
29
30 #[should_fail]
31 fn test01(xs: &[i32]) {
32 let _x = xs[0];
33 }
34
35 fn test_len(xs: &[i32]) {
36 if xs.len() > 0 {
37 let _x = xs[0];
38 }
39 }
40
41 fn test_is_empty(xs: &[i32]) {
42 if !xs.is_empty() {
43 let _x = xs[0];
44 }
45 }
46
47 fn test_first00(xs: &[i32]) {
48 if xs.len() > 0 {
49 assert(xs.first().is_some());
50 }
51 if xs.is_empty() {
52 assert(xs.first().is_none());
53 }
54 }
55
56 #[should_fail]
57 fn test_first01(xs: &[i32]) {
58 assert(xs.first().is_some());
59 }
60
61 fn test_iter00(xs: &[i32]) {
62 let it = xs.iter();
63 let ys = it.as_slice();
64 assert(xs.len() == ys.len());
65 }
66}