Documentation
use super::*;
use crate::VCFError;
use nom::{self, bytes::complete::is_not, bytes::complete::tag, bytes::complete::take_while};

fn create_header() -> VCFHeader {
    let vcf_data = include_bytes!("../../testfiles/simple1.vcf");
    let mut vcf_reader = io::BufReader::new(&vcf_data[..]);
    let (_, _, header) = crate::header::parse_header(&mut vcf_reader).unwrap();
    header
}

#[test]
fn test_parse_nested_separated_values() {
    let mut result = Vec::new();
    let (rest, _) =
        parser::parse_nested_separated_values::<_, _, _, _, _, (&[u8], nom::error::ErrorKind)>(
            &mut result,
            b"A:X:Z,B:Y,C,D:E:F:G 1",
            is_not(&b",: "[..]),
            tag(b":"),
            tag(b","),
            false,
        )
        .unwrap();
    assert_eq!(rest, b" 1");
    assert_eq!(
        result,
        vec![
            vec![&b"A"[..], &b"X"[..], &b"Z"[..]],
            vec![&b"B"[..], &b"Y"[..]],
            vec![&b"C"[..]],
            vec![&b"D"[..], &b"E"[..], &b"F"[..], &b"G"[..]]
        ]
    );

    let (rest, _) =
        parser::parse_nested_separated_values::<_, _, _, _, _, (&[u8], nom::error::ErrorKind)>(
            &mut result,
            b" 1",
            is_not(&b",: "[..]),
            tag(b":"),
            tag(b","),
            false,
        )
        .unwrap();
    assert_eq!(rest, b" 1");
    assert_eq!(result, Vec::<Vec<&[u8]>>::new());
}

#[test]
fn test_parse_separated_values() {
    let mut result = Vec::new();
    let (rest, _) = parser::parse_separated_values::<_, _, _, (&[u8], nom::error::ErrorKind)>(
        &mut result,
        b"A X,B Y,C=Z_x",
        is_not(&b",_"[..]),
        tag(b","),
        false,
    )
    .unwrap();
    assert_eq!(rest, b"_x");
    assert_eq!(result, vec![&b"A X"[..], &b"B Y"[..], &b"C=Z"[..]]);

    let (rest, _) = parser::parse_separated_values::<_, _, _, (&[u8], nom::error::ErrorKind)>(
        &mut result,
        b"1:2",
        is_not(&b":"[..]),
        tag(b":"),
        false,
    )
    .unwrap();
    assert_eq!(rest, b"");
    assert_eq!(result, vec![&b"1"[..], &b"2"[..]]);

    let (rest, _) = parser::parse_separated_values::<_, _, _, (&[u8], nom::error::ErrorKind)>(
        &mut result,
        b"1:: 2",
        take_while(|x| x != b':' && x != b' '),
        tag(b":"),
        false,
    )
    .unwrap();
    assert_eq!(rest, b" 2");
    assert_eq!(result, vec![&b"1"[..], &b""[..], &b""[..]]);
}

#[test]
fn test_parse_info() {
    let test_info1 = b"AC=54;AF=1;AN=54;DB;DP=749\t";
    let mut parsed_info = Vec::new();
    let (rest, _) =
        parser::parse_info::<(&[u8], nom::error::ErrorKind)>(test_info1, &mut parsed_info).unwrap();
    assert_eq!(
        parsed_info,
        vec![
            (b"AC".to_vec(), vec![b"54".to_vec()]),
            (b"AF".to_vec(), vec![b"1".to_vec()]),
            (b"AN".to_vec(), vec![b"54".to_vec()]),
            (b"DB".to_vec(), vec![]),
            (b"DP".to_vec(), vec![b"749".to_vec()]),
        ]
    );
    assert_eq!(rest, b"\t");
}

#[test]
#[allow(clippy::unreadable_literal)]
#[allow(clippy::cognitive_complexity)]
fn test_parse_record1() -> Result<(), VCFError> {
    let test_record1 = &b"13\t32889968\trs206119,rs60320776\tG\tA\t25743.5\t.\tAC=54;AF=1;AN=54;DP=749\tGT:AD:DP\t1/1:0,14:14\t1/1:0,19:19\n"[..];
    let mut record = VCFRecord::new(create_header());
    assert_eq!(
        parse_record::<nom::error::VerboseError<_>>(&test_record1, &mut record),
        Ok((&b""[..], ()))
    );

    let mut record2 = record.clone();
    record2.parse_bytes(test_record1, 1)?;
    assert_eq!(record, record2);
    let record3 = VCFRecord::from_bytes(test_record1, 1, record.header.clone())?;
    assert_eq!(record, record3);

    assert_eq!(record.chromosome, b"13");
    assert_eq!(record.position, 32889968);
    assert_eq!(record.id, vec![&b"rs206119"[..], &b"rs60320776"[..]]);
    assert_eq!(record.reference, b"G");
    assert_eq!(record.alternative, vec![b"A"]);
    assert_eq!(record.qual, Some(25743.5));
    assert_eq!(record.filter, Vec::<&[u8]>::new());
    assert_eq!(
        record.info,
        vec![
            (b"AC".to_vec(), vec![b"54".to_vec()]),
            (b"AF".to_vec(), vec![b"1".to_vec()]),
            (b"AN".to_vec(), vec![b"54".to_vec()]),
            (b"DP".to_vec(), vec![b"749".to_vec()]),
        ]
    );
    assert_eq!(record.info(b"AC"), Some(&vec![b"54".to_vec()]));
    assert_eq!(record.info(b"AF"), Some(&vec![b"1".to_vec()]));
    assert_eq!(record.info(b"AN"), Some(&vec![b"54".to_vec()]));
    assert_eq!(record.info(b"DP"), Some(&vec![b"749".to_vec()]));
    assert_eq!(record.info_mut(b"DP"), Some(&mut vec![b"749".to_vec()]));
    if let Some(x) = record.info_mut(b"DP") {
        x.push(b"XXXX".to_vec());
    }
    assert_eq!(
        record.info(b"DP"),
        Some(&vec![b"749".to_vec(), b"XXXX".to_vec()])
    );
    assert_eq!(
        record.insert_info(b"AC", vec![b"X".to_vec(), b"Y".to_vec()]),
        Some(vec![b"54".to_vec()])
    );
    assert_eq!(
        record.info(b"AC"),
        Some(&vec![b"X".to_vec(), b"Y".to_vec()])
    );
    assert_eq!(record.insert_info(b"Z", vec![b"1".to_vec()]), None);
    assert_eq!(record.info(b"Z"), Some(&vec![b"1".to_vec()]));
    assert_eq!(
        record.info,
        vec![
            (b"AC".to_vec(), vec![b"X".to_vec(), b"Y".to_vec()]),
            (b"AF".to_vec(), vec![b"1".to_vec()]),
            (b"AN".to_vec(), vec![b"54".to_vec()]),
            (b"DP".to_vec(), vec![b"749".to_vec(), b"XXXX".to_vec()]),
            (b"Z".to_vec(), vec![b"1".to_vec()])
        ]
    );

    assert_eq!(record.format, vec![&b"GT"[..], &b"AD"[..], &b"DP"[..]]);
    assert_eq!(
        record.genotype,
        vec![
            vec![
                vec![&b"1/1"[..]],
                vec![&b"0"[..], &b"14"[..]],
                vec![&b"14"[..]]
            ],
            vec![
                vec![&b"1/1"[..]],
                vec![&b"0"[..], &b"19"[..]],
                vec![&b"19"[..]]
            ]
        ]
    );
    assert_eq!(
        record.genotype(b"ERP001775_HiSeq2000_SAMEA1531955-1", b"GT"),
        Some(&vec![b"1/1".to_vec()])
    );
    assert_eq!(
        record.genotype(b"ERP001775_HiSeq2000_SAMEA1531955-1", b"AD"),
        Some(&vec![b"0".to_vec(), b"14".to_vec()])
    );
    assert_eq!(
        record.genotype(b"ERP001775_HiSeq2000_SAMEA1531955-1", b"DP"),
        Some(&vec![b"14".to_vec()])
    );

    assert_eq!(
        record.genotype_mut(b"ERP001775_HiSeq2000_SAMEA1531955-1", b"DP"),
        Some(&mut vec![b"14".to_vec()])
    );
    if let Some(x) = record.genotype_mut(b"ERP001775_HiSeq2000_SAMEA1531955-1", b"DP") {
        x.push(b"XXX".to_vec());
    }
    assert_eq!(
        record.genotype(b"ERP001775_HiSeq2000_SAMEA1531955-1", b"DP"),
        Some(&vec![b"14".to_vec(), b"XXX".to_vec()])
    );

    assert_eq!(
        record.insert_genotype(
            b"ERP001775_HiSeq2000_SAMEA1531955-1",
            b"AD",
            vec![b"A".to_vec(), b"B".to_vec()]
        ),
        Some(vec![b"0".to_vec(), b"14".to_vec()])
    );
    assert_eq!(
        record.genotype(b"ERP001775_HiSeq2000_SAMEA1531955-1", b"AD"),
        Some(&vec![b"A".to_vec(), b"B".to_vec()])
    );

    assert_eq!(
        record.insert_genotype(
            b"ERP001775_HiSeq2000_SAMEA1531955-1",
            b"X",
            vec![b"100".to_vec()]
        ),
        None
    );
    assert_eq!(
        record.insert_genotype(
            b"ERP001775_HiSeq2000_SAMEA1531955-2",
            b"X",
            vec![b"200".to_vec()]
        ),
        None
    );
    assert_eq!(
        record.insert_genotype(
            b"ERP001775_HiSeq2000_SAMEA1531955-2",
            b"Y",
            vec![b"300".to_vec()]
        ),
        None
    );
    assert_eq!(
        record.insert_genotype(
            b"ERP001775_HiSeq2000_SAMEA1531955-2",
            b"Z",
            vec![b"400".to_vec()]
        ),
        None
    );
    assert_eq!(
        record.insert_genotype(
            b"ERP001775_HiSeq2000_SAMEA1531955-1",
            b"Z",
            vec![b"500".to_vec()]
        ),
        None
    );
    assert_eq!(
        record.format,
        vec![
            &b"GT"[..],
            &b"AD"[..],
            &b"DP"[..],
            &b"X"[..],
            &b"Y"[..],
            &b"Z"[..]
        ]
    );
    assert_eq!(
        record.genotype,
        vec![
            vec![
                vec![&b"1/1"[..]],
                vec![&b"A"[..], &b"B"[..]],
                vec![&b"14"[..], &b"XXX"[..]],
                vec![&b"100"[..]],
                vec![&b"."[..]],
                vec![&b"500"[..]]
            ],
            vec![
                vec![&b"1/1"[..]],
                vec![&b"0"[..], &b"19"[..]],
                vec![&b"19"[..]],
                vec![&b"200"[..]],
                vec![&b"300"[..]],
                vec![&b"400"[..]]
            ]
        ]
    );

    Ok(())
}

#[test]
#[allow(clippy::unreadable_literal)]
fn test_parse_record2() -> Result<(), VCFError> {
    let test_record1 = &b"13\t32889968\trs206119,rs60320776\tG\tA"[..];
    let mut record = VCFRecord::new(create_header());
    assert_eq!(
        parse_record::<nom::error::VerboseError<_>>(&test_record1, &mut record),
        Ok((&b""[..], ()))
    );
    assert_eq!(record.chromosome, b"13");
    assert_eq!(record.position, 32889968);
    assert_eq!(record.id, vec![&b"rs206119"[..], &b"rs60320776"[..]]);
    assert_eq!(record.reference, b"G");
    assert_eq!(record.alternative, vec![b"A"]);
    Ok(())
}

#[test]
#[allow(clippy::unreadable_literal)]
fn test_parse_record3() -> Result<(), VCFError> {
    let test_record1 = &b"13\t32889968\trs206119,rs60320776\tG\tA\t25743.5\r\n"[..];
    let mut record = VCFRecord::new(create_header());

    assert_eq!(
        parse_record::<nom::error::VerboseError<_>>(&test_record1, &mut record),
        Ok((&b""[..], ()))
    );
    assert_eq!(record.chromosome, b"13");
    assert_eq!(record.position, 32889968);
    assert_eq!(record.id, vec![&b"rs206119"[..], &b"rs60320776"[..]]);
    assert_eq!(record.reference, b"G");
    assert_eq!(record.alternative, vec![b"A"]);
    assert_eq!(record.qual, Some(25743.5));
    Ok(())
}

#[test]
#[allow(clippy::unreadable_literal)]
fn test_parse_record3_1() -> Result<(), VCFError> {
    let test_record1 = &b"13\t32889968\trs206119,rs60320776\tG\tA\t8.39728e+06\r\n"[..];
    let mut record = VCFRecord::new(create_header());

    assert_eq!(
        parse_record::<nom::error::VerboseError<_>>(&test_record1, &mut record),
        Ok((&b""[..], ()))
    );
    assert_eq!(record.chromosome, b"13");
    assert_eq!(record.position, 32889968);
    assert_eq!(record.id, vec![&b"rs206119"[..], &b"rs60320776"[..]]);
    assert_eq!(record.reference, b"G");
    assert_eq!(record.alternative, vec![b"A"]);
    assert_eq!(record.qual, Some(8.39728e+06));
    Ok(())
}

#[test]
#[allow(clippy::unreadable_literal)]
fn test_parse_record4() -> Result<(), VCFError> {
    let test_record1 = &b"13\t32889968\trs206119,rs60320776\tG\tA\t25743.5\tPASS"[..];
    let mut record = VCFRecord::new(create_header());

    assert_eq!(
        parse_record::<nom::error::VerboseError<_>>(&test_record1, &mut record),
        Ok((&b""[..], ()))
    );
    assert_eq!(record.chromosome, b"13");
    assert_eq!(record.position, 32889968);
    assert_eq!(record.id, vec![&b"rs206119"[..], &b"rs60320776"[..]]);
    assert_eq!(record.reference, b"G");
    assert_eq!(record.alternative, vec![b"A"]);
    assert_eq!(record.qual, Some(25743.5));
    assert_eq!(record.filter, vec![&b"PASS"[..]]);
    Ok(())
}

#[test]
#[allow(clippy::unreadable_literal)]
fn test_parse_record5() -> Result<(), VCFError> {
    let test_record1 =
        &b"13\t32889968\trs206119,rs60320776\tG\tA\t25743.5\t.\tAC=54;AF=1;AN=54;DP=749\n"[..];
    let mut record = VCFRecord::new(create_header());

    assert_eq!(
        parse_record::<nom::error::VerboseError<_>>(&test_record1, &mut record),
        Ok((&b""[..], ()))
    );
    assert_eq!(record.chromosome, b"13");
    assert_eq!(record.position, 32889968);
    assert_eq!(record.id, vec![&b"rs206119"[..], &b"rs60320776"[..]]);
    assert_eq!(record.reference, b"G");
    assert_eq!(record.alternative, vec![b"A"]);
    assert_eq!(record.qual, Some(25743.5));
    assert_eq!(record.filter, Vec::<&[u8]>::new());
    assert_eq!(
        record.info,
        vec![
            (b"AC".to_vec(), vec![b"54".to_vec()]),
            (b"AF".to_vec(), vec![b"1".to_vec()]),
            (b"AN".to_vec(), vec![b"54".to_vec()]),
            (b"DP".to_vec(), vec![b"749".to_vec()]),
        ]
    );
    Ok(())
}

#[test]
#[allow(clippy::unreadable_literal)]
fn test_parse_record6() -> Result<(), VCFError> {
    let test_record1 = &b"13\t32889968\t.\tG\t.\t.\t.\tAC=54;AF=1;AN=54;DP=749\tGT:AD:DP"[..];
    let mut record = VCFRecord::new(create_header());

    assert_eq!(
        parse_record::<nom::error::VerboseError<_>>(&test_record1, &mut record),
        Ok((&b""[..], ()))
    );
    assert_eq!(record.chromosome, b"13");
    assert_eq!(record.position, 32889968);
    assert_eq!(record.id, Vec::<&[u8]>::new());
    assert_eq!(record.reference, b"G");
    assert_eq!(record.alternative, Vec::<&[u8]>::new());
    assert_eq!(record.qual, None);
    assert_eq!(record.filter, Vec::<&[u8]>::new());
    assert_eq!(
        record.info,
        vec![
            (b"AC".to_vec(), vec![b"54".to_vec()]),
            (b"AF".to_vec(), vec![b"1".to_vec()]),
            (b"AN".to_vec(), vec![b"54".to_vec()]),
            (b"DP".to_vec(), vec![b"749".to_vec()]),
        ]
    );
    assert_eq!(record.format, vec![&b"GT"[..], &b"AD"[..], &b"DP"[..]]);
    Ok(())
}

#[test]
#[allow(clippy::unreadable_literal)]
#[allow(clippy::cognitive_complexity)]
fn test_parse_record7() -> Result<(), VCFError> {
    let test_record1 = &b"13\t32889968\trs206119,rs60320776\tG\tA\t25743.5\t.\tAC=54;AF=1;AN=54;DP=749\tGT:AD:DP\t1/1:0,14:14\t1/1:0,19:19\n"[..];
    let mut record = VCFRecord::new(create_header());

    assert_eq!(
        parse_record::<nom::error::VerboseError<_>>(&test_record1, &mut record),
        Ok((&b""[..], ()))
    );
    assert_eq!(record.chromosome, b"13");
    assert_eq!(record.position, 32889968);
    assert_eq!(record.id, vec![&b"rs206119"[..], &b"rs60320776"[..]]);
    assert_eq!(record.reference, b"G");
    assert_eq!(record.alternative, vec![b"A"]);
    assert_eq!(record.qual, Some(25743.5));
    assert_eq!(record.filter, Vec::<&[u8]>::new());
    assert_eq!(
        record.info,
        vec![
            (b"AC".to_vec(), vec![b"54".to_vec()]),
            (b"AF".to_vec(), vec![b"1".to_vec()]),
            (b"AN".to_vec(), vec![b"54".to_vec()]),
            (b"DP".to_vec(), vec![b"749".to_vec()]),
        ]
    );
    assert_eq!(record.format, vec![&b"GT"[..], &b"AD"[..], &b"DP"[..]]);
    assert_eq!(
        record.genotype,
        vec![
            vec![
                vec![&b"1/1"[..]],
                vec![&b"0"[..], &b"14"[..]],
                vec![&b"14"[..]]
            ],
            vec![
                vec![&b"1/1"[..]],
                vec![&b"0"[..], &b"19"[..]],
                vec![&b"19"[..]]
            ]
        ]
    );
    assert_eq!(record.info(b"AC"), Some(&vec![b"54".to_vec()]));
    assert_eq!(record.info(b"AF"), Some(&vec![b"1".to_vec()]));
    assert_eq!(record.info(b"XX"), None);

    let test_record1 = &b"13\t32889968\trs206119,rs60320776\tG\tA"[..];
    assert_eq!(
        parse_record::<nom::error::VerboseError<_>>(&test_record1, &mut record),
        Ok((&b""[..], ()))
    );
    assert_eq!(record.chromosome, b"13");
    assert_eq!(record.position, 32889968);
    assert_eq!(record.id, vec![&b"rs206119"[..], &b"rs60320776"[..]]);
    assert_eq!(record.reference, b"G");
    assert_eq!(record.alternative, vec![b"A"]);
    assert_eq!(record.qual, None);
    assert_eq!(record.filter, Vec::<U8Vec>::new());
    assert_eq!(record.info, vec![]);
    assert_eq!(record.format, Vec::<U8Vec>::new());
    assert_eq!(record.genotype, Vec::<Vec<Vec<U8Vec>>>::new());
    assert_eq!(record.info(b"XX"), None);
    assert_eq!(record.info(b"AC"), None);
    assert_eq!(record.info(b"AF"), None);

    let test_record1 = &b"13\t32889968\trs206119,rs60320776\tG\tA\t25743.5\r\n"[..];
    assert_eq!(
        parse_record::<nom::error::VerboseError<_>>(&test_record1, &mut record),
        Ok((&b""[..], ()))
    );
    assert_eq!(record.chromosome, b"13");
    assert_eq!(record.position, 32889968);
    assert_eq!(record.id, vec![&b"rs206119"[..], &b"rs60320776"[..]]);
    assert_eq!(record.reference, b"G");
    assert_eq!(record.alternative, vec![b"A"]);
    assert_eq!(record.qual, Some(25743.5));

    let test_record1 = &b"13\t32889968\trs206119,rs60320776\tG\tA\t25743.5\tPASS"[..];

    assert_eq!(
        parse_record::<nom::error::VerboseError<_>>(&test_record1, &mut record),
        Ok((&b""[..], ()))
    );
    assert_eq!(record.chromosome, b"13");
    assert_eq!(record.position, 32889968);
    assert_eq!(record.id, vec![&b"rs206119"[..], &b"rs60320776"[..]]);
    assert_eq!(record.reference, b"G");
    assert_eq!(record.alternative, vec![b"A"]);
    assert_eq!(record.qual, Some(25743.5));
    assert_eq!(record.filter, vec![&b"PASS"[..]]);

    let test_record1 =
        &b"13\t32889968\trs206119,rs60320776\tG\tA\t25743.5\t.\tAC=54;AF=1;AN=54;DP=749\n"[..];

    assert_eq!(
        parse_record::<nom::error::VerboseError<_>>(&test_record1, &mut record),
        Ok((&b""[..], ()))
    );
    assert_eq!(record.chromosome, b"13");
    assert_eq!(record.position, 32889968);
    assert_eq!(record.id, vec![&b"rs206119"[..], &b"rs60320776"[..]]);
    assert_eq!(record.reference, b"G");
    assert_eq!(record.alternative, vec![b"A"]);
    assert_eq!(record.qual, Some(25743.5));
    assert_eq!(record.filter, Vec::<&[u8]>::new());
    assert_eq!(
        record.info,
        vec![
            (b"AC".to_vec(), vec![b"54".to_vec()]),
            (b"AF".to_vec(), vec![b"1".to_vec()]),
            (b"AN".to_vec(), vec![b"54".to_vec()]),
            (b"DP".to_vec(), vec![b"749".to_vec()]),
        ]
    );
    assert_eq!(record.info(b"AC"), Some(&vec![b"54".to_vec()]));
    assert_eq!(record.info(b"AF"), Some(&vec![b"1".to_vec()]));
    assert_eq!(record.info(b"XX"), None);

    let test_record1 = &b"13\t32889968\t.\tG\t.\t.\t.\tAC=54;AF=1;AN=54;DP=749\tGT:AD:DP"[..];

    assert_eq!(
        parse_record::<nom::error::VerboseError<_>>(&test_record1, &mut record),
        Ok((&b""[..], ()))
    );
    assert_eq!(record.chromosome, b"13");
    assert_eq!(record.position, 32889968);
    assert_eq!(record.id, Vec::<&[u8]>::new());
    assert_eq!(record.reference, b"G");
    assert_eq!(record.alternative, Vec::<&[u8]>::new());
    assert_eq!(record.qual, None);
    assert_eq!(record.filter, Vec::<&[u8]>::new());
    assert_eq!(
        record.info,
        vec![
            (b"AC".to_vec(), vec![b"54".to_vec()]),
            (b"AF".to_vec(), vec![b"1".to_vec()]),
            (b"AN".to_vec(), vec![b"54".to_vec()]),
            (b"DP".to_vec(), vec![b"749".to_vec()]),
        ]
    );
    assert_eq!(record.format, vec![&b"GT"[..], &b"AD"[..], &b"DP"[..]]);

    let test_record1 = &b"13\t32889968\t.\tG\t.\t.\t.\t.\n"[..];

    assert_eq!(
        parse_record::<nom::error::VerboseError<_>>(&test_record1, &mut record),
        Ok((&b""[..], ()))
    );
    assert_eq!(record.chromosome, b"13");
    assert_eq!(record.position, 32889968);
    assert_eq!(record.id, Vec::<&[u8]>::new());
    assert_eq!(record.reference, b"G");
    assert_eq!(record.alternative, Vec::<&[u8]>::new());
    assert_eq!(record.qual, None);
    assert_eq!(record.filter, Vec::<&[u8]>::new());
    assert_eq!(record.info, vec![]);
    Ok(())
}

#[test]
fn test_write() {
    let mut vcf_record = VCFRecord::new(create_header());
    let test_record1 = &b"13\t32889968\t.\tG\tA\t.\t.\tAC=1;AF=0.5\n"[..];
    parse_record::<nom::error::VerboseError<_>>(test_record1, &mut vcf_record).unwrap();
    let mut write_data = Vec::new();
    vcf_record.write_record(&mut write_data).unwrap();
    assert_eq!(write_data, test_record1);

    let test_record2 =
        &b"13\t32889968\t123\tG\tA\t102.0\tLOW,HIGH\tAC=1;AF=0.5\tGT:DP\t1/1:10\t0/1:20\n"[..];
    parse_record::<nom::error::VerboseError<_>>(test_record2, &mut vcf_record).unwrap();
    let mut write_data = Vec::new();
    vcf_record.write_record(&mut write_data).unwrap();
    assert_eq!(write_data, test_record2);
}