spintronics 0.3.0

Pure Rust library for simulating spin dynamics, spin current generation, and conversion phenomena in magnetic and topological materials
Documentation
use criterion::{black_box, criterion_group, criterion_main, Criterion};
use spintronics::Vector3;

fn bench_vector3_creation(c: &mut Criterion) {
    c.bench_function("vector3_creation", |b| {
        b.iter(|| black_box(Vector3::new(1.0, 2.0, 3.0)))
    });
}

fn bench_vector3_addition(c: &mut Criterion) {
    let v1 = Vector3::new(1.0, 2.0, 3.0);
    let v2 = Vector3::new(4.0, 5.0, 6.0);
    c.bench_function("vector3_add_1000", |b| {
        b.iter(|| {
            let mut result = Vector3::zero();
            for _ in 0..1000 {
                result = result + black_box(v1) + black_box(v2);
            }
            black_box(result)
        })
    });
}

fn bench_vector3_cross(c: &mut Criterion) {
    let v1 = Vector3::new(1.0, 2.0, 3.0);
    let v2 = Vector3::new(4.0, 5.0, 6.0);
    c.bench_function("vector3_cross_product", |b| {
        b.iter(|| black_box(v1.cross(&v2)))
    });
}

fn bench_vector3_dot(c: &mut Criterion) {
    let v1 = Vector3::new(1.0, 2.0, 3.0);
    let v2 = Vector3::new(4.0, 5.0, 6.0);
    c.bench_function("vector3_dot_product", |b| b.iter(|| black_box(v1.dot(&v2))));
}

fn bench_vector3_normalize(c: &mut Criterion) {
    let v = Vector3::new(1.0, 2.0, 3.0);
    c.bench_function("vector3_normalize", |b| b.iter(|| black_box(v.normalize())));
}

fn bench_vector3_magnitude(c: &mut Criterion) {
    let v = Vector3::new(1.0, 2.0, 3.0);
    c.bench_function("vector3_magnitude", |b| b.iter(|| black_box(v.magnitude())));
}

criterion_group!(
    benches,
    bench_vector3_creation,
    bench_vector3_addition,
    bench_vector3_cross,
    bench_vector3_dot,
    bench_vector3_normalize,
    bench_vector3_magnitude
);
criterion_main!(benches);