147 lines
2.5 KiB
Rust
147 lines
2.5 KiB
Rust
use num_traits::float::FloatCore;
|
|
use num_traits::{Num, NumCast, One, ToPrimitive, Zero};
|
|
use ordered_float::NotNan;
|
|
use std::num::FpCategory;
|
|
use std::ops::{Add, Div, Mul, Neg, Rem, Sub};
|
|
|
|
#[derive(Copy, Clone, PartialOrd, PartialEq)]
|
|
struct EvilFloat(f32);
|
|
|
|
impl Zero for EvilFloat {
|
|
fn zero() -> Self {
|
|
todo!()
|
|
}
|
|
|
|
fn is_zero(&self) -> bool {
|
|
todo!()
|
|
}
|
|
}
|
|
|
|
impl Add for EvilFloat {
|
|
type Output = Self;
|
|
|
|
fn add(self, _: Self) -> Self::Output {
|
|
todo!()
|
|
}
|
|
}
|
|
|
|
impl One for EvilFloat {
|
|
fn one() -> Self {
|
|
todo!()
|
|
}
|
|
}
|
|
|
|
impl Mul for EvilFloat {
|
|
type Output = Self;
|
|
|
|
fn mul(self, _: Self) -> Self::Output {
|
|
todo!()
|
|
}
|
|
}
|
|
|
|
impl Sub for EvilFloat {
|
|
type Output = Self;
|
|
|
|
fn sub(self, _: Self) -> Self::Output {
|
|
todo!()
|
|
}
|
|
}
|
|
|
|
impl Div for EvilFloat {
|
|
type Output = Self;
|
|
|
|
fn div(self, _: Self) -> Self::Output {
|
|
todo!()
|
|
}
|
|
}
|
|
|
|
impl Rem for EvilFloat {
|
|
type Output = Self;
|
|
|
|
fn rem(self, _: Self) -> Self::Output {
|
|
todo!()
|
|
}
|
|
}
|
|
|
|
impl NumCast for EvilFloat {
|
|
fn from<T: ToPrimitive>(_: T) -> Option<Self> {
|
|
todo!()
|
|
}
|
|
}
|
|
|
|
impl ToPrimitive for EvilFloat {
|
|
fn to_i64(&self) -> Option<i64> {
|
|
todo!()
|
|
}
|
|
|
|
fn to_u64(&self) -> Option<u64> {
|
|
todo!()
|
|
}
|
|
}
|
|
|
|
impl Neg for EvilFloat {
|
|
type Output = Self;
|
|
|
|
fn neg(self) -> Self::Output {
|
|
todo!()
|
|
}
|
|
}
|
|
|
|
impl FloatCore for EvilFloat {
|
|
fn is_nan(self) -> bool {
|
|
false
|
|
}
|
|
fn infinity() -> Self {
|
|
todo!()
|
|
}
|
|
fn neg_infinity() -> Self {
|
|
todo!()
|
|
}
|
|
fn nan() -> Self {
|
|
todo!()
|
|
}
|
|
fn neg_zero() -> Self {
|
|
todo!()
|
|
}
|
|
fn min_value() -> Self {
|
|
todo!()
|
|
}
|
|
fn min_positive_value() -> Self {
|
|
todo!()
|
|
}
|
|
fn epsilon() -> Self {
|
|
todo!()
|
|
}
|
|
fn max_value() -> Self {
|
|
todo!()
|
|
}
|
|
fn classify(self) -> FpCategory {
|
|
todo!()
|
|
}
|
|
fn to_degrees(self) -> Self {
|
|
todo!()
|
|
}
|
|
fn to_radians(self) -> Self {
|
|
todo!()
|
|
}
|
|
fn integer_decode(self) -> (u64, i16, i8) {
|
|
todo!()
|
|
}
|
|
}
|
|
|
|
impl Num for EvilFloat {
|
|
type FromStrRadixErr = ();
|
|
|
|
fn from_str_radix(_: &str, _: u32) -> Result<Self, Self::FromStrRadixErr> {
|
|
todo!()
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
#[should_panic]
|
|
fn test_cmp_panic() {
|
|
let evil_value = NotNan::new(EvilFloat(f32::NAN)).unwrap();
|
|
let x = NotNan::new(EvilFloat(0.0)).unwrap();
|
|
let _ = evil_value.cmp(&x);
|
|
}
|