#![cfg(target_arch = "x86_64")]
use archmage::SimdToken;
use archmage::*;
#[test]
fn tokens_are_zst() {
assert_eq!(core::mem::size_of::<X64V2Token>(), 0);
assert_eq!(core::mem::size_of::<X64V3Token>(), 0);
assert_eq!(core::mem::size_of::<Avx2FmaToken>(), 0); #[cfg(feature = "avx512")]
assert_eq!(core::mem::size_of::<X64V4Token>(), 0);
}
#[test]
fn tokens_are_copy() {
fn assert_copy<T: Copy>() {}
assert_copy::<X64V2Token>();
assert_copy::<X64V3Token>();
assert_copy::<Avx2FmaToken>();
#[cfg(feature = "avx512")]
assert_copy::<X64V4Token>();
}
#[test]
fn token_names() {
assert_eq!(X64V2Token::NAME, "x86-64-v2");
assert_eq!(X64V3Token::NAME, "x86-64-v3");
assert_eq!(Avx2FmaToken::NAME, "x86-64-v3");
#[cfg(feature = "avx512")]
assert_eq!(X64V4Token::NAME, "AVX-512"); }
#[test]
fn token_hierarchy_x64v3() {
if let Some(token) = X64V3Token::summon() {
let _v2: X64V2Token = token.v2();
}
}
#[test]
fn summon_is_consistent() {
let result1 = X64V3Token::summon().is_some();
let result2 = X64V3Token::summon().is_some();
assert_eq!(result1, result2);
let result1 = X64V2Token::summon().is_some();
let result2 = X64V2Token::summon().is_some();
assert_eq!(result1, result2);
}
#[test]
fn marker_traits_compile() {
use archmage::{Has128BitSimd, Has256BitSimd};
fn requires_128<T: Has128BitSimd>(_: T) {}
fn requires_256<T: Has256BitSimd>(_: T) {}
if let Some(token) = X64V2Token::summon() {
requires_128(token);
}
if let Some(token) = Avx2FmaToken::summon() {
requires_128(token);
requires_256(token);
}
if let Some(token) = X64V3Token::summon() {
requires_128(token);
requires_256(token);
}
}