polylane 0.15.0

Portable and versatile SIMD.
Documentation
// Copyright 2025 Gabriel Bjørnager Jensen.
//
// This Source Code Form is subject to the terms of
// the Mozilla Public License, v. 2.0. If a copy of
// the MPL was not distributed with this file, you
// can obtain one at:
// <https://mozilla.org/MPL/2.0/>.

#![cfg(test)]

use polylane::convert::simd_scalar_cast;

#[expect(clippy::cast_lossless)]
#[expect(clippy::float_cmp)]
#[expect(clippy::unnecessary_cast)]
#[test]
fn test_simd_scalar_cast() {
	assert_eq!(simd_scalar_cast::<u8,    u8>(69u8), 69u8 as u8);
	assert_eq!(simd_scalar_cast::<u8,    i8>(69u8), 69u8 as i8);
	assert_eq!(simd_scalar_cast::<u8,   u16>(69u8), 69u8 as u16);
	assert_eq!(simd_scalar_cast::<u8,   i16>(69u8), 69u8 as i16);
	assert_eq!(simd_scalar_cast::<u8,   u32>(69u8), 69u8 as u32);
	assert_eq!(simd_scalar_cast::<u8,   i32>(69u8), 69u8 as i32);
	assert_eq!(simd_scalar_cast::<u8,   u64>(69u8), 69u8 as u64);
	assert_eq!(simd_scalar_cast::<u8,   i64>(69u8), 69u8 as i64);
	assert_eq!(simd_scalar_cast::<u8,  u128>(69u8), 69u8 as u128);
	assert_eq!(simd_scalar_cast::<u8,  i128>(69u8), 69u8 as i128);
	assert_eq!(simd_scalar_cast::<u8, usize>(69u8), 69u8 as usize);
	assert_eq!(simd_scalar_cast::<u8, isize>(69u8), 69u8 as isize);
	assert_eq!(simd_scalar_cast::<u8,   f32>(69u8), 69u8 as f32);
	assert_eq!(simd_scalar_cast::<u8,   f64>(69u8), 69u8 as f64);

	assert_eq!(simd_scalar_cast::<i128,     u8>(-420i128), -420i128 as u8);
	assert_eq!(simd_scalar_cast::<i128,     i8>(-420i128), -420i128 as i8);
	assert_eq!(simd_scalar_cast::<i128,    u16>(-420i128), -420i128 as u16);
	assert_eq!(simd_scalar_cast::<i128,    i16>(-420i128), -420i128 as i16);
	assert_eq!(simd_scalar_cast::<i128,    u32>(-420i128), -420i128 as u32);
	assert_eq!(simd_scalar_cast::<i128,    i32>(-420i128), -420i128 as i32);
	assert_eq!(simd_scalar_cast::<i128,    u64>(-420i128), -420i128 as u64);
	assert_eq!(simd_scalar_cast::<i128,    i64>(-420i128), -420i128 as i64);
	assert_eq!(simd_scalar_cast::<i128,   u128>(-420i128), -420i128 as u128);
	assert_eq!(simd_scalar_cast::<i128,   i128>(-420i128), -420i128 as i128);
	assert_eq!(simd_scalar_cast::<i128,  usize>(-420i128), -420i128 as usize);
	assert_eq!(simd_scalar_cast::<i128,  isize>(-420i128), -420i128 as isize);
	assert_eq!(simd_scalar_cast::<i128,    f32>(-420i128), -420i128 as f32);
	assert_eq!(simd_scalar_cast::<i128,    f64>(-420i128), -420i128 as f64);

	assert_eq!(simd_scalar_cast::<f64,     u8>(-69.420f64), -69.420f64 as u8);
	assert_eq!(simd_scalar_cast::<f64,     i8>(-69.420f64), -69.420f64 as i8);
	assert_eq!(simd_scalar_cast::<f64,    u16>(-69.420f64), -69.420f64 as u16);
	assert_eq!(simd_scalar_cast::<f64,    i16>(-69.420f64), -69.420f64 as i16);
	assert_eq!(simd_scalar_cast::<f64,    u32>(-69.420f64), -69.420f64 as u32);
	assert_eq!(simd_scalar_cast::<f64,    i32>(-69.420f64), -69.420f64 as i32);
	assert_eq!(simd_scalar_cast::<f64,    u64>(-69.420f64), -69.420f64 as u64);
	assert_eq!(simd_scalar_cast::<f64,    i64>(-69.420f64), -69.420f64 as i64);
	assert_eq!(simd_scalar_cast::<f64,   u128>(-69.420f64), -69.420f64 as u128);
	assert_eq!(simd_scalar_cast::<f64,   i128>(-69.420f64), -69.420f64 as i128);
	assert_eq!(simd_scalar_cast::<f64,  usize>(-69.420f64), -69.420f64 as usize);
	assert_eq!(simd_scalar_cast::<f64,  isize>(-69.420f64), -69.420f64 as isize);
	assert_eq!(simd_scalar_cast::<f64,    f32>(-69.420f64), -69.420f64 as f32);
	assert_eq!(simd_scalar_cast::<f64,    f64>(-69.420f64), -69.420f64 as f64);
}