#![cfg_attr(feature = "nightly-allocator-api", feature(allocator_api))]
use turbocow::EcoVec;
#[cfg(any(
feature = "allocator-api2-v02",
feature = "allocator-api2-v03",
feature = "nightly-allocator-api"
))]
use turbocow::Global;
fn main() {
println!("Turbocow allocator example");
standard_usage();
#[cfg(feature = "allocator-api2-v02")]
bump_allocator_usage();
}
fn standard_usage() {
println!("\n=== Standard Usage (Global Allocator) ===");
#[cfg(not(any(
feature = "allocator-api2-v02",
feature = "allocator-api2-v03",
feature = "nightly-allocator-api"
)))]
let mut vec = EcoVec::new();
#[cfg(any(
feature = "allocator-api2-v02",
feature = "allocator-api2-v03",
feature = "nightly-allocator-api"
))]
let mut vec: EcoVec<i32, Global> = EcoVec::<i32, Global>::new();
vec.push(1);
vec.push(2);
vec.push(3);
println!("EcoVec: {:?}", vec.as_slice());
#[cfg(not(any(
feature = "allocator-api2-v02",
feature = "allocator-api2-v03",
feature = "nightly-allocator-api"
)))]
let vec2 = EcoVec::from_elem(42, 5);
#[cfg(any(
feature = "allocator-api2-v02",
feature = "allocator-api2-v03",
feature = "nightly-allocator-api"
))]
let vec2: EcoVec<i32, Global> = EcoVec::<i32, Global>::from_elem(42, 5);
println!("EcoVec from_elem: {:?}", vec2.as_slice());
}
#[cfg(feature = "allocator-api2-v02")]
fn bump_allocator_usage() {
use bump_scope::Bump;
println!("\n=== Bump Allocator Usage ===");
let bump: Bump = Bump::new();
let mut vec = EcoVec::new_in(&bump);
vec.push(10);
vec.push(20);
vec.push(30);
println!("EcoVec with bump: {:?}", vec.as_slice());
let vec2: EcoVec<i32, _> = EcoVec::with_capacity_in(100, &bump);
println!("EcoVec capacity with bump: {}", vec2.capacity());
let vec3 = EcoVec::from_elem_in(7, 3, &bump);
println!("EcoVec from_elem_in: {:?}", vec3.as_slice());
let data = vec![1, 2, 3, 4, 5];
let vec4 = EcoVec::from_slice_in(&data, &bump);
println!("EcoVec from_slice_in: {:?}", vec4.as_slice());
println!("\nAll bump allocator tests completed successfully!");
}