simple_collections/
stack.rs1#[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}