simple_collections/
stack.rs

1#[derive(Debug)]
2pub struct Stack<T> {
3    stack: Vec<T>,
4}
5
6impl<T> Stack<T> {
7    pub fn new() -> Self {
8        Stack { stack: Vec::new() }
9    }
10    pub fn push(&mut self, val: T) {
11        self.stack.push(val);
12    }
13    pub fn pop(&mut self) -> Option<T> {
14        self.stack.pop()
15    }
16    pub fn size(&self) -> usize {
17        self.stack.len()
18    }
19    pub fn empty(&self) -> bool {
20        self.size() == 0
21    }
22}
23
24#[cfg(test)]
25mod tests {
26    use super::*;
27    fn test() {
28        let mut s = Stack::new();
29        assert_eq!(s.size(), 0);
30        assert!(s.empty());
31        assert_eq!(s.pop(), None);
32        s.push(1);
33        assert!(!s.empty());
34        assert_eq!(s.size(), 1); 
35        s.push(2);
36        assert_eq!(s.size(), 2);
37        s.push(3); 
38        assert_eq!(s.size(), 3);
39        assert_eq!(s.pop(), Some(3));
40        assert_eq!(s.pop(), Some(2));
41        assert_eq!(s.pop(), Some(1));
42        assert_eq!(s.pop(), None);
43        assert_eq!(s.size(), 0);
44        assert!(s.empty());
45    }
46}