use crate::{ChunkedVec, ChunkedVecSized};
impl<T, const N: usize> ChunkedVecSized<T, N> {
#[inline]
#[must_use]
#[allow(clippy::new_ret_no_self)]
pub fn new() -> ChunkedVec<T, N> {
ChunkedVec {
data: Vec::new(),
len: 0,
}
}
#[inline]
#[must_use]
pub fn with_capacity(capacity: usize) -> ChunkedVec<T, N> {
let chunk_size = capacity.div_ceil(N);
ChunkedVec {
data: Vec::with_capacity(chunk_size),
len: 0,
}
}
#[inline]
#[must_use]
pub fn with_chunk_count(chunk_count: usize) -> ChunkedVec<T, N> {
ChunkedVec {
data: Vec::with_capacity(chunk_count),
len: 0,
}
}
}
impl<T> ChunkedVec<T> {
#[inline]
#[must_use]
pub fn new() -> Self {
ChunkedVecSized::new()
}
#[inline]
#[must_use]
pub fn with_capacity(capacity: usize) -> Self {
ChunkedVecSized::with_capacity(capacity)
}
#[inline]
#[must_use]
pub fn with_chunk_count(chunk_count: usize) -> Self {
ChunkedVecSized::with_chunk_count(chunk_count)
}
}
#[cfg(test)]
mod tests {
use crate::{ChunkedVec, ChunkedVecSized};
#[test]
fn test_new() {
let vec: ChunkedVec<i32> = ChunkedVec::new();
assert_eq!(vec.len(), 0);
assert_eq!(vec.capacity(), 0);
}
#[test]
fn test_with_capacity() {
let mut vec: ChunkedVec<i32> = ChunkedVec::with_capacity(10);
assert_eq!(vec.len(), 0);
assert_eq!(vec.capacity(), 64);
for i in 0..10 {
vec.push(i);
}
assert_eq!(vec.len(), 10);
assert_eq!(vec.capacity(), 64);
for i in 0..200 {
vec.push(i);
}
assert_eq!(vec.len(), 210);
assert_eq!(vec.capacity(), 256)
}
#[test]
fn test_with_chunks() {
let mut vec = ChunkedVec::with_chunk_count(2);
assert_eq!(vec.len(), 0);
for i in 0..16 {
vec.push(i);
}
assert_eq!(vec.len(), 16);
}
#[test]
fn test_with_chunk_size() {
let vec: ChunkedVec<i32, 8> = ChunkedVecSized::new();
assert_eq!(vec.len(), 0);
}
#[test]
fn test_with_chunk_size_and_capacity() {
let mut vec: ChunkedVec<i32, 8> = ChunkedVecSized::with_capacity(10);
assert_eq!(vec.len(), 0);
assert_eq!(vec.capacity(), 16);
for i in 0..20 {
vec.push(i);
}
assert_eq!(vec.len(), 20);
assert_eq!(vec.capacity(), 32);
}
}