[go: up one dir, main page]

wide 0.3.0

A crate to help you go wide.
Documentation
#![allow(clippy::float_cmp)]
use bytemuck::*;
use wide::*;

#[test]
fn f32x4_new_order() {
  let f = f32x4::new(0.0, 1.0, 2.0, 3.0);
  assert_eq!(f[0], 0.0);
  assert_eq!(f[1], 1.0);
  assert_eq!(f[2], 2.0);
  assert_eq!(f[3], 3.0);
}

#[test]
fn f32x4_array_cast_order() {
  let f = cast::<[f32; 4], f32x4>([0.0, 1.0, 2.0, 3.0]);
  assert_eq!(f[0], 0.0);
  assert_eq!(f[1], 1.0);
  assert_eq!(f[2], 2.0);
  assert_eq!(f[3], 3.0);
}

#[test]
fn f32x4_merge() {
  let f = f32x4::new(0.0, 1.0, 2.0, 3.0);

  let mask = f.cmp_eq(f32x4::ZERO);
  assert!(mask[0].is_nan());
  assert_eq!(mask[1], 0.0);
  assert_eq!(mask[2], 0.0);
  assert_eq!(mask[3], 0.0);

  let combined = mask.merge(f32x4::ONE, f32x4::ZERO);
  assert_eq!(combined[0], 1.0);
  assert_eq!(combined[1], 0.0);
  assert_eq!(combined[2], 0.0);
  assert_eq!(combined[3], 0.0);

  let mask = f.cmp_gt(f32x4::from(1.5));
  assert_eq!(mask[0], 0.0);
  assert_eq!(mask[1], 0.0);
  assert!(mask[2].is_nan());
  assert!(mask[3].is_nan());

  let combined = mask.merge(f32x4::ONE, f32x4::ZERO);
  assert_eq!(combined[0], 0.0);
  assert_eq!(combined[1], 0.0);
  assert_eq!(combined[2], 1.0);
  assert_eq!(combined[3], 1.0);
}