ryot 0.2.2

MMORPG library based on the concepts of open tibia written in rust and bevy.
Documentation
use super::super::*;
use glam::UVec2;
use rstest::rstest;
use serde_json::to_string;

#[rstest]
#[case(SpriteLayout::OneByOne, 0)]
#[case(SpriteLayout::OneByTwo, 1)]
#[case(SpriteLayout::TwoByOne, 2)]
#[case(SpriteLayout::TwoByTwo, 3)]
fn test_serialize(#[case] layout: SpriteLayout, #[case] expected: u32) {
    let serialized = to_string(&layout).unwrap();
    assert_eq!(serialized, expected.to_string());
}

#[rstest]
#[case(SpriteLayout::OneByOne, 0)]
#[case(SpriteLayout::OneByTwo, 1)]
#[case(SpriteLayout::TwoByOne, 2)]
#[case(SpriteLayout::TwoByTwo, 3)]
fn test_deserialize(#[case] layout: SpriteLayout, #[case] expected: u32) {
    let deserialized: SpriteLayout = serde_json::from_str(&expected.to_string()).unwrap();
    assert_eq!(deserialized, layout);
}

#[test]
fn test_deserialize_invalid() {
    let deserialized: Result<SpriteLayout, _> = serde_json::from_str("4");
    assert!(deserialized.is_err());
}

#[rstest]
#[case(UVec2::new(16, 16))]
#[case(UVec2::new(32, 32))]
#[case(UVec2::new(64, 64))]
#[case(UVec2::new(128, 128))]
#[case(UVec2::new(256, 256))]
#[case(UVec2::new(512, 512))]
fn test_layout_dimensions(#[case] tile_size: UVec2) {
    assert_eq!(SpriteLayout::OneByOne.get_width(&tile_size), tile_size.x);
    assert_eq!(SpriteLayout::OneByOne.get_height(&tile_size), tile_size.y);

    assert_eq!(SpriteLayout::OneByTwo.get_width(&tile_size), tile_size.x);
    assert_eq!(
        SpriteLayout::OneByTwo.get_height(&tile_size),
        2 * tile_size.y
    );

    assert_eq!(
        SpriteLayout::TwoByOne.get_width(&tile_size),
        2 * tile_size.x
    );
    assert_eq!(SpriteLayout::TwoByOne.get_height(&tile_size), tile_size.y);

    assert_eq!(
        SpriteLayout::TwoByTwo.get_width(&tile_size),
        2 * tile_size.x
    );
    assert_eq!(
        SpriteLayout::TwoByTwo.get_height(&tile_size),
        2 * tile_size.y
    );
}