cubecl-std 0.12.0-pre.1

CubeCL Standard Library.
Documentation
use approx::assert_abs_diff_eq;
use core::f32::consts::{PI, TAU};
use cubecl_runtime::runtime::Runtime;

use crate::trigonometry::*;

pub fn test_to_degrees<R: Runtime>() {
    let cases = [
        (0.0, 0.0),
        (PI / 6.0, 30.0),
        (PI / 4.0, 45.0),
        (PI / 2.0, 90.0),
        (PI, 180.0),
        (TAU, 360.0),
    ];

    for (input, expected) in cases {
        assert_abs_diff_eq!(
            to_degrees::harness::<R, f32>(input),
            expected,
            epsilon = 1e-5
        );
    }
}

pub fn test_to_radians<R: Runtime>() {
    let cases = [
        (0.0, 0.0),
        (30.0, PI / 6.0),
        (45.0, PI / 4.0),
        (90.0, PI / 2.0),
        (180.0, PI),
        (360.0, TAU),
    ];

    for (input, expected) in cases {
        assert_abs_diff_eq!(
            to_radians::harness::<R, f32>(input),
            expected,
            epsilon = 1e-5
        );
    }
}

#[macro_export]
macro_rules! testgen_trigonometry {
    () => {
        mod trigonometry {
            use super::*;
            use $crate::tests::trigonometry::*;

            #[$crate::tests::test_log::test]
            fn test_to_degrees_conversion() {
                test_to_degrees::<TestRuntime>();
            }

            #[$crate::tests::test_log::test]
            fn test_to_radians_conversion() {
                test_to_radians::<TestRuntime>();
            }
        }
    };
}