Complete the pinned parity example module closure
Adopt only tests/common/mod.rs from exact T835 checkpoint29cb24a878. The already-adopted223aa125parity example references this missing module, preventing root cargo fmt. No in-progress product fixes or full test suites are incorporated.
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
use content_history::{ContentId, Entry, History, Object, ObjectId, Tree};
|
||||
|
||||
pub fn objects() -> Vec<Object> {
|
||||
let empty = Object::Blob(Vec::new());
|
||||
let text = Object::Blob(b"a\r\n\xc3\xa9\0".to_vec());
|
||||
let ObjectId::Blob(empty_id) = empty.id() else {
|
||||
unreachable!()
|
||||
};
|
||||
let ObjectId::Blob(text_id) = text.id() else {
|
||||
unreachable!()
|
||||
};
|
||||
let entries = vec![
|
||||
Entry {
|
||||
key: "é".into(),
|
||||
target: ContentId::Blob(text_id),
|
||||
},
|
||||
Entry {
|
||||
key: "z".into(),
|
||||
target: ContentId::Blob(empty_id),
|
||||
},
|
||||
];
|
||||
let map = Object::Tree(Tree::map(entries.clone()).unwrap());
|
||||
let sequence = Object::Tree(Tree::sequence(entries).unwrap());
|
||||
let ObjectId::Tree(root) = map.id() else {
|
||||
unreachable!()
|
||||
};
|
||||
let first = Object::History(History {
|
||||
root,
|
||||
parent: None,
|
||||
actor: "user:編集".into(),
|
||||
timestamp_micros: -1,
|
||||
});
|
||||
let ObjectId::History(parent) = first.id() else {
|
||||
unreachable!()
|
||||
};
|
||||
let returned = Object::History(History {
|
||||
root,
|
||||
parent: Some(parent),
|
||||
actor: "user:編集".into(),
|
||||
timestamp_micros: 0,
|
||||
});
|
||||
vec![
|
||||
empty,
|
||||
text,
|
||||
Object::Tree(Tree::map(vec![]).unwrap()),
|
||||
Object::Tree(Tree::sequence(vec![]).unwrap()),
|
||||
map,
|
||||
sequence,
|
||||
first,
|
||||
returned,
|
||||
Object::Tree(
|
||||
Tree::map(vec![Entry {
|
||||
key: "nested".into(),
|
||||
target: ContentId::Tree(root),
|
||||
}])
|
||||
.unwrap(),
|
||||
),
|
||||
]
|
||||
}
|
||||
|
||||
pub fn digest_bytes(object: &Object) -> [u8; 32] {
|
||||
match object.id() {
|
||||
ObjectId::Blob(id) => *id.as_bytes(),
|
||||
ObjectId::Tree(id) => *id.as_bytes(),
|
||||
ObjectId::History(id) => *id.as_bytes(),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn parity_word(index: u32) -> u32 {
|
||||
let objects = objects();
|
||||
let Some(object) = objects.get(index as usize / 8) else {
|
||||
return u32::MAX;
|
||||
};
|
||||
let hash = digest_bytes(object);
|
||||
let offset = (index as usize % 8) * 4;
|
||||
u32::from_be_bytes(hash[offset..offset + 4].try_into().unwrap())
|
||||
}
|
||||
Reference in New Issue
Block a user