atone 0.3.9

A VecDeque and Vec variant that spreads resize load across pushes.
Documentation
#![cfg(feature = "serde")]

use atone::Vc;
use serde_test::{assert_tokens, Token};

#[test]
fn test_serde_empty_vc() {
    let my_vec: Vc<u32> = Vc::default();
    assert_tokens(&my_vec, &[Token::Seq { len: Some(0) }, Token::SeqEnd])
}

#[test]
fn test_serde_non_empty() {
    let mut my_vec: Vc<u32> = Vc::default();
    my_vec.push(1);
    my_vec.push(2);
    my_vec.push(3);
    assert_tokens(
        &my_vec,
        &[
            Token::Seq { len: Some(3) },
            Token::U32(1),
            Token::U32(2),
            Token::U32(3),
            Token::SeqEnd,
        ],
    )
}

#[test]
fn test_serde_while_atoning() {
    let mut my_vec: Vc<u32> = Vc::with_capacity(15);
    for i in 1..=16 {
        my_vec.push(i);
    }
    assert!(my_vec.is_atoning());
    assert_tokens(
        &my_vec,
        &[
            Token::Seq { len: Some(16) },
            Token::U32(1),
            Token::U32(2),
            Token::U32(3),
            Token::U32(4),
            Token::U32(5),
            Token::U32(6),
            Token::U32(7),
            Token::U32(8),
            Token::U32(9),
            Token::U32(10),
            Token::U32(11),
            Token::U32(12),
            Token::U32(13),
            Token::U32(14),
            Token::U32(15),
            Token::U32(16),
            Token::SeqEnd,
        ],
    );
}

#[test]
fn test_vec_to_vc_serde() {
    let sinful: Vec<u32> = vec![1, 2, 3, 4];
    let json = serde_json::to_string(&sinful).unwrap();
    let atoner: Vc<u32> = serde_json::from_str(&json).unwrap();
    assert_eq!(
        sinful, atoner,
        "Deserialized Vc is not identical to the original Vec"
    );
}

#[test]
fn test_vc_to_vec_serde() {
    let mut atoner: Vc<u32> = Vc::new();
    atoner.push(1);
    atoner.push(2);
    atoner.push(3);
    atoner.push(4);
    let json = serde_json::to_string(&atoner).unwrap();
    let baptized: Vec<u32> = serde_json::from_str(&json).unwrap();
    assert_eq!(
        atoner, baptized,
        "Deserialized Vec is not identical to the original Vc"
    );
}