1pub mod tails;
12
13pub use self::tails::Tails;
14use std::marker::Sized;
15
16pub trait DataList {
18
19 fn tails(&self) -> Tails<Self>
35 where Self: Sized;
36}
37
38
39impl<T> DataList for Vec<T> {
40 fn tails(&self) -> Tails<Self> {
41 Tails::create(&self)
42 }
43}
44
45use std::slice::Iter;
46
47impl<'a, T> DataList for Iter<'a, T> {
48 fn tails(&self) -> Tails<Self> {
49 Tails::create(&self)
50 }
51}
52
53impl<'a, T> DataList for &'a[T] {
54 fn tails(&self) -> Tails<Self> {
55 Tails::create(&self)
56 }
57}
58
59#[test]
60fn slice_test_tails() {
61 let v = [1,2,3,4];
62 let b = vec![
63 vec![1,2,3,4],
64 vec![2,3,4],
65 vec![3,4],
66 vec![4],
67 vec![],
68 ];
69 for (a,b) in (&v[..]).tails().into_iter().zip(b) {
70 assert_eq!(a,&b[..]);
71 }
72}
73
74
75#[test]
76fn iter_test_tails() {
77 let v = [1,2,3,4];
78 let b = vec![
79 vec![1,2,3,4],
80 vec![2,3,4],
81 vec![3,4],
82 vec![4],
83 vec![],
84 ];
85 for (a,b) in v.iter().tails().into_iter().zip(b) {
86 let a = a.into_iter().map(|x| *x).collect::<Vec<_>>();
87 assert_eq!(a,b);
88 }
89}
90
91
92#[test]
93fn vector_test_tails() {
94 let v = vec![1,2,3,4];
95 let b = vec![
96 vec![1,2,3,4],
97 vec![2,3,4],
98 vec![3,4],
99 vec![4],
100 vec![],
101 ];
102 for (a,b) in v.tails().into_iter().zip(b) {
103 assert_eq!(a,&b[..]);
104 }
105}
106
107#[test]
108fn slice_test_tails_empty() {
109 let v: [i32;0] = [];
110 let b: Vec<Vec<i32>> = vec![
111 vec![],
112 ];
113 for (a,b) in (&v[..]).tails().into_iter().zip(b) {
114 assert_eq!(a,&b[..]);
115 }
116}
117
118#[test]
119fn vector_test_tails_empty() {
120 let v: Vec<i32> = vec![];
121 let b: Vec<Vec<i32>> = vec![
122 vec![],
123 ];
124 for (a,b) in v.tails().into_iter().zip(b) {
125 assert_eq!(a,&b[..]);
126 }
127}
128
129#[test]
130fn iter_test_tails_empty() {
131 let v: Vec<i32> = vec![];
132 let b: Vec<Vec<i32>> = vec![
133 vec![],
134 ];
135 for (a,b) in v.iter().tails().into_iter().zip(b) {
136 let a = a.into_iter().map(|x| *x).collect::<Vec<_>>();
137 assert_eq!(a,b);
138 }
139}