use crate::*;
use num_traits::*;
use pretty_assertions::assert_eq;
use rstest::*;
#[fixture]
fn u8_vec() -> Vec<u8> {
(0..=(u8::MAX)).collect::<Vec<u8>>()
}
#[rstest]
fn test_u8_add(u8_vec: Vec<u8>) {
for i in u8_vec.iter() {
for j in u8_vec.iter() {
let i = *i;
let j = *j;
let x = U8::new(i);
let y = U8::new(j);
if let Some(expected) = i.checked_add(j) {
let expected = U8::new(expected);
assert_eq!(x + y, expected);
assert_eq!(x.checked_add(&y), Some(expected));
} else {
assert_eq!(x.checked_add(&y), None);
}
let expected = i.wrapping_add(j);
let expected = U8::new(expected);
assert_eq!(x.wrapping_add(&y), expected);
}
}
}
#[rstest]
fn test_u8_sub(u8_vec: Vec<u8>) {
for i in u8_vec.iter() {
for j in u8_vec.iter() {
let i = *i;
let j = *j;
let x = U8::new(i);
let y = U8::new(j);
if let Some(expected) = i.checked_sub(j) {
let expected = U8::new(expected);
assert_eq!(x - y, expected);
assert_eq!(x.checked_sub(&y), Some(expected));
} else {
assert_eq!(x.checked_sub(&y), None);
}
let expected = i.wrapping_sub(j);
let expected = U8::new(expected);
assert_eq!(x.wrapping_sub(&y), expected);
}
}
}
#[rstest]
fn test_u8_mul(u8_vec: Vec<u8>) {
for i in u8_vec.iter() {
for j in u8_vec.iter() {
let i = *i;
let j = *j;
let x = U8::new(i);
let y = U8::new(j);
if let Some(expected) = i.checked_mul(j) {
let expected = U8::new(expected);
assert_eq!(x * y, expected);
assert_eq!(x.checked_mul(&y), Some(expected));
} else {
assert_eq!(x.checked_mul(&y), None);
}
}
}
}
#[rstest]
fn test_u8_div(u8_vec: Vec<u8>) {
for i in u8_vec.iter() {
for j in u8_vec.iter() {
let i = *i;
let j = *j;
let x = U8::new(i);
let y = U8::new(j);
if let Some(expected) = i.checked_div(j) {
let expected = U8::new(expected);
assert_eq!(x / y, expected);
assert_eq!(x.checked_div(&y), Some(expected));
} else {
assert_eq!(x.checked_div(&y), None);
}
}
}
}
#[rstest]
fn test_u8_rem(u8_vec: Vec<u8>) {
for i in u8_vec.iter() {
for j in u8_vec.iter() {
let i = *i;
let j = *j;
let x = U8::new(i);
let y = U8::new(j);
if let Some(expected) = i.checked_rem(j) {
let expected = U8::new(expected);
assert_eq!(x % y, expected);
assert_eq!(x.checked_rem(&y), Some(expected));
} else {
assert_eq!(x.checked_rem(&y), None);
}
}
}
}