flux_core/slice/
mod.rs

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}