#[derive(Debug, Clone)] enum Action {
Insert {
name: HeaderName, // Name to insert
val: HeaderValue, // Value to insert
old: Option<HeaderValue>, // Old value
},
Append {
name: HeaderName,
val: HeaderValue,
ret: bool,
},
Remove {
name: HeaderName, // Name to remove
val: Option<HeaderValue>, // Value to get
},
}
// An alternate implementation of HeaderMap backed by HashMap #[derive(Debug, Clone, Default)] struct AltMap {
map: HashMap<HeaderName, Vec<HeaderValue>>,
}
/// This will also apply the action against `self` fn gen_action(&mutself, weight: &Weight, rng: &mut StdRng) -> Action { let sum = weight.insert + weight.remove + weight.append;
letmut num = rng.gen_range(0, sum);
if num < weight.insert { returnself.gen_insert(rng);
}
num -= weight.insert;
if num < weight.remove { returnself.gen_remove(rng);
}
num -= weight.remove;
if num < weight.append { returnself.gen_append(rng);
}
unreachable!();
}
fn gen_insert(&mutself, rng: &mut StdRng) -> Action { let name = self.gen_name(4, rng); let val = gen_header_value(rng); let old = self.insert(name.clone(), val.clone());
for (key, val) in &self.map { // Test get
assert_eq!(other.get(key), val.get(0));
// Test get_all let vals = other.get_all(key); let actual: Vec<_> = vals.iter().collect();
assert_eq!(&actual[..], &val[..]);
}
}
}
impl Action { fn apply(self, map: &mut HeaderMap<HeaderValue>) { matchself {
Action::Insert { name, val, old } => { let actual = map.insert(name, val);
assert_eq!(actual, old);
}
Action::Remove { name, val } => { // Just to help track the state, load all associated values. let _ = map.get_all(&name).iter().collect::<Vec<_>>();
let actual = map.remove(&name);
assert_eq!(actual, val);
}
Action::Append { name, val, ret } => {
assert_eq!(ret, map.append(name, val));
}
}
}
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.