libribzip2 0.5.0

a bzip2 library written in pure rust
Documentation
pub(crate) fn inverse_bwt(data: &[u8], orig_ptr: usize) -> Vec<u8> {
    let mut out = vec![];
    let mut pairs = data.iter().enumerate().collect::<Vec<_>>();
    pairs.sort_by(|x, y| x.1.cmp(y.1));
    let mut start = pairs.iter().find(|(x, _)| *x == orig_ptr).unwrap().0;

    for _ in 0..data.len() {
        let pair = pairs[start];
        out.push(*pair.1);
        start = pair.0;
    }
    out
}

#[cfg(test)]
mod test {
    use super::*;
    #[test]
    pub fn test() {
        let res = inverse_bwt(b"nnbaaa", 3);
        assert_eq!(res, b"banana".to_vec());
    }

    #[test]
    pub fn longer_test() {
        let transformed = b"fsrrdkkeaddrrffs,esd?????     eeiiiieeeehrppkllkppttpphppPPIootwppppPPcccccckk      iipp    eeeeeeeeer'ree  ";
        let orig_ptr = 24;
        let original = b"If Peter Piper picked a peck of pickled peppers, where's the peck of pickled peppers Peter Piper picked?????".to_vec();

        let res = inverse_bwt(transformed, orig_ptr);
        assert_eq!(res, original);
    }
}