bvh_anim 0.4.0

A .bvh file parser
Documentation
use bvh_anim::{
    bvh,
    write::{IndentStyle, LineTerminator, WriteOptions},
};
use pretty_assertions::assert_eq;

#[test]
fn test_write() {
    const BVH_STRING: &str = include_str!("../data/test_simple.bvh");

    let bvh = bvh! {
        HIERARCHY
        ROOT Base
        {
            OFFSET 0.0 0.0 0.0
            CHANNELS 6 Xposition Yposition Zposition Zrotation Xrotation Yrotation
            JOINT End
            {
                OFFSET 0.0 0.0 15.0
                CHANNELS 3 Zrotation Xrotation Yrotation
                End Site
                {
                    OFFSET 0.0 0.0 30.0
                }
            }
        }
        MOTION
        Frames: 2
        Frame Time: 0.033333333
        0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
        1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0
    };

    let bvh_string = WriteOptions::new()
        .with_offset_significant_figures(1)
        .with_frame_time_significant_figures(9)
        .with_motion_values_significant_figures(1)
        .with_line_terminator(LineTerminator::native())
        .with_indent(IndentStyle::with_spaces(4))
        .write_to_string(&bvh);

    assert_eq!(bvh_string.trim(), BVH_STRING.trim());
}

#[test]
fn test_load_write_is_identical() {
    const BVH_STRING: &str = include_str!("../data/test_simple.bvh");
    let bvh = bvh_anim::from_str(BVH_STRING).unwrap();
    let bvh_string = WriteOptions::new()
        .with_indent(IndentStyle::with_spaces(4))
        .with_frame_time_significant_figures(9)
        .with_offset_significant_figures(1)
        .with_motion_values_significant_figures(1)
        .with_line_terminator(LineTerminator::native())
        .write_to_string(&bvh);

    assert_eq!(bvh_string, BVH_STRING);
}