use std::ops::Deref;
use crate::Bucket;
#[test]
fn construction() {
let bucket = Bucket::new(1);
assert!(!bucket.is_empty()); }
#[test]
fn default_construction() {
let bucket = Bucket::<i32>::default();
assert!(bucket.is_empty()); }
#[test]
fn empty_exception() {
let bucket_zero = Bucket::new(0);
let bucket_unit = Bucket::new(());
let bucket_null = Bucket::new(std::ptr::null() as *const u8);
assert!(bucket_zero.is_empty());
assert!(bucket_unit.is_empty());
assert!(bucket_null.is_empty());
}
#[test]
fn vacating_primitive() {
let bucket = Bucket::new(5);
let data = bucket.vacate();
assert!(data.is_some()); assert_eq!(data.unwrap(), 5); }
#[test]
fn vacating_non_primitive() {
let bucket = Bucket::new(Box::new(5));
let data = bucket.vacate();
assert!(data.is_some()); assert_eq!(data.unwrap().deref(), &5); }
#[test]
fn filling() {
let bucket = Bucket::default();
bucket.fill(Box::new(5));
assert!(!bucket.is_empty()); assert!(bucket.fill(Box::new(10)).is_some()); assert!(bucket.vacate().is_some());
assert!(bucket.fill(Box::new(10)).is_none()); }
#[test]
fn peek_ref() {
let bucket = Bucket::new(5);
assert_eq!(bucket.peek_ref().unwrap(), &5); }
#[test]
fn peek_ref_mut() {
let bucket = Bucket::new(5);
let peek = bucket.peek_mut().unwrap();
assert_eq!(peek, &mut 5); *peek = 6;
assert_eq!(bucket.peek_mut().unwrap(), &mut 6); }