specs_transform 0.5.0

transform 2d and 3d component for specs
#![feature(test)]

extern crate test;

extern crate specs;
extern crate specs_bundler;
extern crate specs_transform;

use test::Bencher;

use specs::{WorldExt,Builder, DispatcherBuilder, World};
use specs_bundler::Bundler;
use specs_transform::{Parent, Transform2D, Transform3D, TransformBundle};

#[bench]
fn bench_specs_transform_2d_system(b: &mut Bencher) {
    let mut world = World::new();

    let mut dispatcher = Bundler::new(&mut world, DispatcherBuilder::new())
        .bundle(TransformBundle::<f32>::default())
        .unwrap()
        .build();

    let parent = world
        .create_entity()
        .with(Transform2D::<f32>::default())
        .build();

    let child = world
        .create_entity()
        .with(Parent::new(parent))
        .with(Transform2D::<f32>::default())
        .build();

    let _ = world
        .create_entity()
        .with(Parent::new(child))
        .with(Transform2D::<f32>::default())
        .build();

    b.iter(move || {
        dispatcher.dispatch(&mut world);
    });
}

#[bench]
fn bench_specs_transform_3d_system(b: &mut Bencher) {
    let mut world = World::new();

    let mut dispatcher = Bundler::new(&mut world, DispatcherBuilder::new())
        .bundle(TransformBundle::<f32>::default())
        .unwrap()
        .build();

    let parent = world
        .create_entity()
        .with(Transform3D::<f32>::default())
        .build();

    let child = world
        .create_entity()
        .with(Parent::new(parent))
        .with(Transform3D::<f32>::default())
        .build();

    let _ = world
        .create_entity()
        .with(Parent::new(child))
        .with(Transform3D::<f32>::default())
        .build();

    b.iter(move || {
        dispatcher.dispatch(&mut world);
    });
}

#[bench]
fn bench_specs_transform_system(b: &mut Bencher) {
    let mut world = World::new();

    let mut dispatcher = Bundler::new(&mut world, DispatcherBuilder::new())
        .bundle(TransformBundle::<f32>::default())
        .unwrap()
        .build();

    let parent = world
        .create_entity()
        .with(Transform3D::<f32>::default())
        .build();

    let child = world
        .create_entity()
        .with(Parent::new(parent))
        .with(Transform2D::<f32>::default())
        .build();

    let _ = world
        .create_entity()
        .with(Parent::new(child))
        .with(Transform3D::<f32>::default())
        .build();

    b.iter(move || {
        dispatcher.dispatch(&mut world);
    });
}