cold-string 0.2.0

A 1-word SSO string that saves up to 24 bytes over String.
Documentation
use cold_string::*;
use proptest::prelude::*;

#[cfg(miri)]
fn proptest_config() -> ProptestConfig {
    ProptestConfig {
        failure_persistence: None,
        cases: 16,
        ..Default::default()
    }
}

#[cfg(not(miri))]
fn proptest_config() -> ProptestConfig {
    ProptestConfig::with_cases(65536)
}

proptest! {
    #![proptest_config(proptest_config())]

    #[test]
    fn arb_string_eq((left, right) in any::<(String, String)>()) {
        let cold1 = ColdString::new(left.as_str());
        let cold2 = ColdString::new(right.as_str());
        assert_eq!(cold1 == cold2, left == right);
        assert_eq!(cold1 == right.as_str(), left == right);
        assert_eq!(right.as_str() == cold1, left == right);
        assert_eq!(cold2 == left.as_str(), left == right);
        assert_eq!(left.as_str() == cold2, left == right);
    }

    #[test]
    fn arb_string(s in any::<String>()) {
        let cold = ColdString::new(s.as_str());
        assert_eq!(s.len() <= core::mem::size_of::<usize>(), cold.is_inline());
        assert_eq!(cold.len(), s.len());
        assert_eq!(cold.as_str(), s.as_str());
        assert_eq!(cold, ColdString::from(s.as_str()));
        assert_eq!(cold, cold.clone());
        assert_eq!(cold, s.as_str());
        assert_eq!(s.as_str(), cold);
        assert_eq!(unsafe { ColdString::from_utf8_unchecked(s.as_bytes()).as_bytes() }, s.as_bytes());
        if s.len() <= core::mem::size_of::<usize>() {
            assert_eq!(ColdString::new_inline_const(&s), cold);
        }
    }

}