wral 0.2.0

Write ahead logging for durability
Documentation
use arbitrary::Unstructured;
use mkit::{
    self,
    {cbor::FromCbor, cbor::IntoCbor},
};
use rand::{prelude::random, rngs::SmallRng, Rng, SeedableRng};

use super::*;

#[test]
fn test_entry() {
    use mkit::cbor::Cbor;

    let seed: u128 = random();
    println!("test_entry {}", seed);
    let mut rng = SmallRng::from_seed(seed.to_le_bytes());

    let mut entries: Vec<Entry> = (0..1000)
        .map(|_i| {
            let bytes = rng.gen::<[u8; 32]>();
            let mut uns = Unstructured::new(&bytes);
            uns.arbitrary::<Entry>().unwrap()
        })
        .collect();
    entries.sort();
    entries.dedup_by(|a, b| a.seqno == b.seqno);

    for entry in entries.iter() {
        let entry = entry.clone();
        assert_eq!(entry.to_seqno(), entry.seqno);
        let (seqno, op) = entry.clone().unwrap();
        assert_eq!(entry, Entry::new(seqno, op));

        let cbor: Cbor = entry.clone().into_cbor().unwrap();
        let mut buf: Vec<u8> = vec![];
        let n = cbor.encode(&mut buf).unwrap();
        let (val, m) = Cbor::decode(&mut buf.as_slice()).unwrap();
        assert_eq!(n, m);
        assert_eq!(cbor, val);

        let entr = Entry::from_cbor(val).unwrap();
        assert_eq!(entr, entry);
    }

    let mut seqno = 0;
    for entry in entries.into_iter() {
        assert!(seqno < entry.seqno, "{} {}", seqno, entry.seqno);
        seqno = entry.seqno
    }
}