str-buf 4.0.0

Static string buffer
Documentation
use str_buf::StrBuf;

type ZeroStr = StrBuf<0>;
const _: ZeroStr = ZeroStr::from_str("");
type SmolStr = StrBuf<5>;
type MediumStr = StrBuf<290>;
type BigStr = StrBuf<67_000>;

#[test]
#[should_panic]
fn from_str_overflow_panic() {
    let _ = ZeroStr::from_str("lolka");
}

#[test]
#[should_panic]
fn from_str_overflow_panic_smol() {
    let _ = SmolStr::from_str("lolkaasdasd");
}

#[test]
#[should_panic]
fn and_overflow_panic() {
    let _ = SmolStr::from_str("1234").and("extra");
}

#[test]
fn and_not_overflow_after_set_len() {
    let smol = unsafe {
        SmolStr::from_str("1234").const_set_len(2).and("34")
    };
    assert_eq!(smol, "1234")
}

#[cfg_attr(miri, ignore)]
#[test]
#[should_panic]
fn and_overflow_panic_medium() {
    let mut buffer = MediumStr::new();
    loop {
        buffer = buffer.and("extra");
    }
}

#[cfg_attr(miri, ignore)]
#[test]
#[should_panic]
fn and_overflow_panic_big() {
    let mut buffer = BigStr::new();
    loop {
        buffer = buffer.and("extra");
    }
}