unitforge 0.3.19

A library for unit and quantity consistent computations in Rust
Documentation
#![cfg(all(test, feature = "serde"))]

use crate::{
    quantities::*,
    small_linalg::{Matrix3, Vector3},
    PhysicsQuantity,
};
use ndarray::arr1;

#[test]
fn roundtrip_quantity() {
    let original = Force::new(100.0, ForceUnit::kN);

    let json = serde_json::to_string(&original).expect("Failed to serialize ");

    let deserialized: Force = serde_json::from_str(&json).expect("Failed to deserialize ");

    assert_eq!(deserialized.to(ForceUnit::N), original.to(ForceUnit::N));
}

#[test]
fn roundtrip_quantity_ndarray() {
    let original = arr1(&[
        Force::new(50.0, ForceUnit::kN),
        Force::new(75.0, ForceUnit::kN),
    ]);
    let json = serde_json::to_string(&original).expect("Failed to serialize ");

    let deserialized: ndarray::ArrayBase<ndarray::OwnedRepr<Force>, ndarray::Dim<[usize; 1]>> =
        serde_json::from_str(&json).expect("Failed to deserialize ");

    assert_eq!(
        deserialized[1].to(ForceUnit::N),
        original[1].to(ForceUnit::N)
    );
}
#[test]
fn roundtrip_vector() {
    let original: Vector3<Force> = Vector3::from_f64([1.0, 2.0, 3.0]);

    let json = serde_json::to_string(&original).expect("Failed to serialize ");

    let deserialized: Vector3<Force> = serde_json::from_str(&json).expect("Failed to deserialize ");

    assert_eq!(deserialized, original);
}

#[test]
fn roundtrip_matrix() {
    let mat = Matrix3::new([[3_f64; 3]; 3]);
    let f = Force::new(1., ForceUnit::kN);
    let original = mat * f;

    let json = serde_json::to_string(&original).expect("Failed to serialize ");

    let deserialized: Matrix3<Force> = serde_json::from_str(&json).expect("Failed to deserialize ");

    for i in 0..3 {
        for j in 0..3 {
            assert_eq!(deserialized[(i, j)], Force::new(3., ForceUnit::kN))
        }
    }
}