Skip to content

Commit ce43e95

Browse files
committed
Add test for panic in cmp
1 parent 11f0398 commit ce43e95

File tree

1 file changed

+131
-0
lines changed

1 file changed

+131
-0
lines changed

tests/evil.rs

+131
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
use std::num::FpCategory;
2+
use std::ops::{Add, Div, Mul, Neg, Rem, Sub};
3+
use num_traits::float::FloatCore;
4+
use num_traits::{Num, NumCast, One, ToPrimitive, Zero};
5+
use ordered_float::{NotNan};
6+
7+
#[derive(PartialOrd, PartialEq)]
8+
struct EvilFloat(f32);
9+
10+
impl Zero for EvilFloat {
11+
fn zero() -> Self {
12+
todo!()
13+
}
14+
15+
fn is_zero(&self) -> bool {
16+
todo!()
17+
}
18+
}
19+
20+
impl Add for EvilFloat {
21+
type Output = Self;
22+
23+
fn add(self, _: Self) -> Self::Output {
24+
todo!()
25+
}
26+
}
27+
28+
impl One for EvilFloat {
29+
fn one() -> Self {
30+
todo!()
31+
}
32+
}
33+
34+
impl Mul for EvilFloat {
35+
type Output = Self;
36+
37+
fn mul(self, _: Self) -> Self::Output {
38+
todo!()
39+
}
40+
}
41+
42+
impl Sub for EvilFloat {
43+
type Output = Self;
44+
45+
fn sub(self, _: Self) -> Self::Output {
46+
todo!()
47+
}
48+
}
49+
50+
impl Div for EvilFloat {
51+
type Output = Self;
52+
53+
fn div(self, _: Self) -> Self::Output {
54+
todo!()
55+
}
56+
}
57+
58+
impl Rem for EvilFloat {
59+
type Output = Self;
60+
61+
fn rem(self, _: Self) -> Self::Output {
62+
todo!()
63+
}
64+
}
65+
66+
impl NumCast for EvilFloat {
67+
fn from<T: ToPrimitive>(_: T) -> Option<Self> {
68+
todo!()
69+
}
70+
}
71+
72+
impl ToPrimitive for EvilFloat {
73+
fn to_i64(&self) -> Option<i64> {
74+
todo!()
75+
}
76+
77+
fn to_u64(&self) -> Option<u64> {
78+
todo!()
79+
}
80+
}
81+
82+
impl Neg for EvilFloat {
83+
type Output = Self;
84+
85+
fn neg(self) -> Self::Output {
86+
todo!()
87+
}
88+
}
89+
90+
impl Copy for EvilFloat {}
91+
92+
impl Clone for EvilFloat {
93+
fn clone(&self) -> Self {
94+
todo!()
95+
}
96+
}
97+
98+
impl FloatCore for EvilFloat {
99+
fn is_nan(self) -> bool {
100+
false
101+
}
102+
fn infinity() -> Self { todo!() }
103+
fn neg_infinity() -> Self { todo!() }
104+
fn nan() -> Self { todo!() }
105+
fn neg_zero() -> Self { todo!() }
106+
fn min_value() -> Self { todo!() }
107+
fn min_positive_value() -> Self { todo!() }
108+
fn epsilon() -> Self { todo!() }
109+
fn max_value() -> Self { todo!() }
110+
fn classify(self) -> FpCategory { todo!() }
111+
fn to_degrees(self) -> Self { todo!() }
112+
fn to_radians(self) -> Self { todo!() }
113+
fn integer_decode(self) -> (u64, i16, i8) { todo!() }
114+
115+
}
116+
117+
impl Num for EvilFloat {
118+
type FromStrRadixErr = ();
119+
120+
fn from_str_radix(_: &str, _: u32) -> Result<Self, Self::FromStrRadixErr> {
121+
todo!()
122+
}
123+
}
124+
125+
#[test]
126+
#[should_panic]
127+
fn test_cmp_panic() {
128+
let evil_value = NotNan::new(EvilFloat(f32::NAN)).unwrap();
129+
let x = NotNan::new(EvilFloat(0.0)).unwrap();
130+
let _ = evil_value.cmp(&x);
131+
}

0 commit comments

Comments
 (0)