cheetah-string 2.1.0

A lightweight, high-performance string manipulation library optimized for speed-sensitive applications
Documentation
use cheetah_string::CheetahString;

#[test]
fn inline_push_str_appends_in_place() {
    let mut s = CheetahString::from("hello");
    let before = s.as_bytes().as_ptr();

    s.push_str(" world");

    assert_eq!(s, "hello world");
    assert_eq!(s.as_bytes().as_ptr(), before);
}

#[test]
fn owned_push_str_reuses_spare_capacity() {
    let mut s = CheetahString::with_capacity(128);
    s.push_str("hello");
    let before = s.as_bytes().as_ptr();

    s.push_str(" world");

    assert_eq!(s, "hello world");
    assert_eq!(s.as_bytes().as_ptr(), before);
}

#[test]
fn add_reuses_owned_lhs_capacity() {
    let mut s = CheetahString::with_capacity(128);
    s.push_str("hello");
    let before = s.as_bytes().as_ptr();

    let s = s + " world";

    assert_eq!(s, "hello world");
    assert_eq!(s.as_bytes().as_ptr(), before);
}

#[test]
fn from_string_owned_preserves_spare_capacity_for_push() {
    let mut raw = String::with_capacity(128);
    raw.push_str("hello");

    let mut s = CheetahString::from_string_owned(raw);
    let before = s.as_bytes().as_ptr();

    s.push_str(" world");

    assert_eq!(s, "hello world");
    assert_eq!(s.as_bytes().as_ptr(), before);
}

#[test]
fn from_string_defaults_to_owned_policy_in_v2() {
    let mut raw = String::with_capacity(128);
    raw.push_str("hello");

    let mut s = CheetahString::from_string(raw);
    let before = s.as_bytes().as_ptr();

    s.push_str(" world");

    assert_eq!(s, "hello world");
    assert_eq!(s.as_bytes().as_ptr(), before);
}

#[test]
fn from_string_shared_keeps_long_immutable_inputs_clone_cheap() {
    let s = CheetahString::from_string_shared("a".repeat(128));
    let cloned = s.clone();

    assert_eq!(s.as_str(), cloned.as_str());
    assert_eq!(s.as_bytes().as_ptr(), cloned.as_bytes().as_ptr());
}

#[test]
fn reserve_zero_keeps_existing_buffer() {
    let mut s = CheetahString::with_capacity(128);
    s.push_str("hello");
    let before = s.as_bytes().as_ptr();

    s.reserve(0);

    assert_eq!(s, "hello");
    assert_eq!(s.as_bytes().as_ptr(), before);
}

#[test]
fn add_assign_uses_push_str_path() {
    let mut s = CheetahString::with_capacity(128);
    s.push_str("hello");
    let before = s.as_bytes().as_ptr();

    s += " world";

    assert_eq!(s, "hello world");
    assert_eq!(s.as_bytes().as_ptr(), before);
}