pub struct Stack<T> {
data: Vec<T>,
}
impl<T> Stack<T> {
pub fn new() -> Self {
Stack { data: Vec::new() }
}
pub fn push(&mut self, item: T) {
self.data.push(item);
}
pub fn pop(&mut self) -> Option<T> {
self.data.pop()
}
pub fn peek(&self) -> Option<&T> {
self.data.last()
}
pub fn is_empty(&self) -> bool {
self.data.is_empty()
}
pub fn len(&self) -> usize {
self.data.len()
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn stack_operations() {
let mut stack = Stack::new();
assert!(stack.is_empty());
stack.push(42);
assert_eq!(stack.peek(), Some(&42));
assert_eq!(stack.pop(), Some(42));
assert!(stack.is_empty());
}
}