proc-macro-tool 0.2.0

Some common simple tool for proc-macro impl
Documentation
#![cfg(test)]

use proc_macro_tool::puncts;
use proc_macro2::{
    Punct,
    Spacing::*, TokenTree,
};

#[test]
fn puncts_test() {
    let tests = [
        Punct::new(':', Joint),
        Punct::new(':', Joint),
    ];
    let puncts = puncts("::", Joint);
    assert_eq!(puncts.clone().into_iter().count(), tests.len());
    for (i, tt) in puncts.into_iter().enumerate() {
        let TokenTree::Punct(p) = tt else {
            panic!("{tt:?}")
        };
        assert_eq!(p.as_char(), tests[i].as_char());
        assert_eq!(p.spacing(), tests[i].spacing());
    }
}

#[test]
fn puncts_test1() {
    let tests = [
        Punct::new(':', Joint),
        Punct::new(':', Alone),
    ];
    let puncts = puncts("::", Alone);
    assert_eq!(puncts.clone().into_iter().count(), tests.len());
    for (i, tt) in puncts.into_iter().enumerate() {
        let TokenTree::Punct(p) = tt else {
            panic!("{tt:?}")
        };
        assert_eq!(p.as_char(), tests[i].as_char());
        assert_eq!(p.spacing(), tests[i].spacing());
    }
}

#[test]
fn puncts_test2() {
    let tests = [
        Punct::new(':', Alone),
        Punct::new(':', Alone),
    ];
    let puncts = puncts(": :", Alone);
    assert_eq!(puncts.clone().into_iter().count(), tests.len());
    for (i, tt) in puncts.into_iter().enumerate() {
        let TokenTree::Punct(p) = tt else {
            panic!("{tt:?}")
        };
        assert_eq!(p.as_char(), tests[i].as_char());
        assert_eq!(p.spacing(), tests[i].spacing());
    }
}

#[test]
fn puncts_test3() {
    let tests = [
        Punct::new(':', Alone),
        Punct::new(':', Alone),
    ];
    let puncts = puncts(":  :", Alone);
    assert_eq!(puncts.clone().into_iter().count(), tests.len());
    for (i, tt) in puncts.into_iter().enumerate() {
        let TokenTree::Punct(p) = tt else {
            panic!("{tt:?}")
        };
        assert_eq!(p.as_char(), tests[i].as_char());
        assert_eq!(p.spacing(), tests[i].spacing());
    }
}

#[test]
fn puncts_test4() {
    let tests = [
        Punct::new(':', Alone),
        Punct::new(':', Joint),
    ];
    let puncts = puncts(":  :", Joint);
    assert_eq!(puncts.clone().into_iter().count(), tests.len());
    for (i, tt) in puncts.into_iter().enumerate() {
        let TokenTree::Punct(p) = tt else {
            panic!("{tt:?}")
        };
        assert_eq!(p.as_char(), tests[i].as_char());
        assert_eq!(p.spacing(), tests[i].spacing());
    }
}