

#![allow(unused_imports)]

use dynfidl::{BasicField, Field, Structure, VectorField};


#[test]
fn test_golden_bool_struct_v2_encode() {
    let value = Structure::default().field(Field::Basic(BasicField::Bool(true)));
    let mut buf = vec![];
    value.encode(&mut buf);
    assert_eq!(
        buf,
        [
0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
],
        "observed (left) must match expected (right)",
    );
}

#[test]
fn test_golden_int_struct_v2_encode() {
    let value = Structure::default().field(Field::Basic(BasicField::Int16(1i16)));
    let mut buf = vec![];
    value.encode(&mut buf);
    assert_eq!(
        buf,
        [
0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
],
        "observed (left) must match expected (right)",
    );
}

#[test]
fn test_golden_uint_struct_v2_encode() {
    let value = Structure::default().field(Field::Basic(BasicField::UInt16(1u16)));
    let mut buf = vec![];
    value.encode(&mut buf);
    assert_eq!(
        buf,
        [
0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
],
        "observed (left) must match expected (right)",
    );
}

#[test]
fn test_golden_string_struct_v2_encode() {
    let value = Structure::default().field(Field::Vector(VectorField::UInt8Vector(String::from("abcd").into_bytes())));
    let mut buf = vec![];
    value.encode(&mut buf);
    assert_eq!(
        buf,
        [
0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0x61,0x62,0x63,0x64,0x00,0x00,0x00,0x00,
],
        "observed (left) must match expected (right)",
    );
}

#[test]
fn test_golden_byte_vector_struct_v2_encode() {
    let value = Structure::default().field(Field::Vector(VectorField::UInt8Vector(vec![1u8, 2u8, 3u8, 4u8, 1u8, 2u8, 3u8, 4u8, 1u8, 2u8, 3u8, 4u8])));
    let mut buf = vec![];
    value.encode(&mut buf);
    assert_eq!(
        buf,
        [
0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0x01,0x02,0x03,0x04,0x01,0x02,0x03,0x04,
0x01,0x02,0x03,0x04,0x00,0x00,0x00,0x00,
],
        "observed (left) must match expected (right)",
    );
}

