use pmcp::RequestHandlerExtra;
use proptest::prelude::*;
proptest! {
#![proptest_config(ProptestConfig { cases: 100, .. ProptestConfig::default() })]
#[test]
fn prop_extensions_insert_get_roundtrip(key in ".{0,64}", value in any::<u64>()) {
let mut extra = RequestHandlerExtra::default();
let pair = (key.clone(), value);
extra.extensions_mut().insert(pair.clone());
let retrieved = extra.extensions().get::<(String, u64)>();
prop_assert_eq!(retrieved, Some(&pair));
}
#[test]
fn prop_extensions_key_collision_returns_old_value(v1: u64, v2: u64) {
let mut extra = RequestHandlerExtra::default();
prop_assert_eq!(extra.extensions_mut().insert(v1), None);
prop_assert_eq!(extra.extensions_mut().insert(v2), Some(v1));
prop_assert_eq!(extra.extensions().get::<u64>(), Some(&v2));
}
#[test]
fn prop_extra_clone_preserves_extensions(value in ".{1,64}") {
let mut extra = RequestHandlerExtra::default();
extra.extensions_mut().insert(value.clone());
let cloned = extra.clone();
prop_assert_eq!(cloned.extensions().get::<String>(), Some(&value));
prop_assert_eq!(extra.extensions().get::<String>(), Some(&value));
}
#[test]
fn prop_extensions_remove_returns_value(v: u64) {
let mut extra = RequestHandlerExtra::default();
extra.extensions_mut().insert(v);
prop_assert_eq!(extra.extensions_mut().remove::<u64>(), Some(v));
prop_assert_eq!(extra.extensions_mut().remove::<u64>(), None);
prop_assert_eq!(extra.extensions().get::<u64>(), None);
}
#[test]
fn prop_extensions_two_types_coexist(s in ".{1,64}", n: u64) {
let mut extra = RequestHandlerExtra::default();
extra.extensions_mut().insert(s.clone());
extra.extensions_mut().insert(n);
prop_assert_eq!(extra.extensions().get::<String>(), Some(&s));
prop_assert_eq!(extra.extensions().get::<u64>(), Some(&n));
extra.extensions_mut().remove::<u64>();
prop_assert_eq!(extra.extensions().get::<String>(), Some(&s));
prop_assert_eq!(extra.extensions().get::<u64>(), None);
}
}