use hex_literal::hex;

#[test]
fn single_literal() {
    assert_eq!(hex!("ff e4"), [0xff, 0xe4]);
}

#[test]
fn empty() {
    let nothing: [u8; 0] = hex!();
    let empty_literals: [u8; 0] = hex!("" "" "");
    let expected: [u8; 0] = [];
    assert_eq!(nothing, expected);
    assert_eq!(empty_literals, expected);
}

#[test]
fn upper_case() {
    assert_eq!(hex!("AE DF 04 B2"), [0xae, 0xdf, 0x04, 0xb2]);
    assert_eq!(hex!("FF BE 8C 00 01"), [0xff, 0xbe, 0x8c, 0x00, 0x01]);
}

#[test]
fn mixed_case() {
    assert_eq!(hex!("bF dd E4 Cd"), [0xbf, 0xdd, 0xe4, 0xcd]);
}

#[test]
fn multiple_literals() {
    assert_eq!(
        hex!(
            "01 dd f7 7f"
            "ee f0 d8"
        ),
        [0x01, 0xdd, 0xf7, 0x7f, 0xee, 0xf0, 0xd8]
    );
    assert_eq!(
        hex!(
            "ff"
            "e8 d0"
            ""
            "01 1f"
            "ab"
        ),
        [0xff, 0xe8, 0xd0, 0x01, 0x1f, 0xab]
    );
}

#[test]
fn no_spacing() {
    assert_eq!(hex!("abf0d8bb0f14"), [0xab, 0xf0, 0xd8, 0xbb, 0x0f, 0x14]);
    assert_eq!(
        hex!("09FFd890cbcCd1d08F"),
        [0x09, 0xff, 0xd8, 0x90, 0xcb, 0xcc, 0xd1, 0xd0, 0x8f]
    );
}

#[test]
fn allows_various_spacing() {
    // newlines
    assert_eq!(
        hex!(
            "f
            f
            d
            0
            e
            
            8
            "
        ),
        [0xff, 0xd0, 0xe8]
    );
    // tabs
    assert_eq!(hex!("9f	d		1		f07	3		01	"), [0x9f, 0xd1, 0xf0, 0x73, 0x01]);
    // spaces
    assert_eq!(hex!(" e    e d0  9 1   f  f  "), [0xee, 0xd0, 0x91, 0xff]);
}

#[test]
fn can_use_const() {
    const _: [u8; 4] = hex!("ff d3 01 7f");
}
