scratch_test_value/math/
trig.rs1use crate::{QuirkSink, SNumber, quirks::SNumberToFloatQ};
2
3impl SNumber {
4 pub fn q_cos<Q>(&self, sink: &mut Q) -> SNumber
5 where
6 Q: QuirkSink<SNumberToFloatQ>,
7 {
8 SNumber::Float(self.q_as_float_nan_is_zero(sink).cos())
9 }
10 pub fn q_sin<Q>(&self, sink: &mut Q) -> SNumber
11 where
12 Q: QuirkSink<SNumberToFloatQ>,
13 {
14 SNumber::Float(self.q_as_float_nan_is_zero(sink).sin())
15 }
16 pub fn q_tan<Q>(&self, sink: &mut Q) -> SNumber
17 where
18 Q: QuirkSink<SNumberToFloatQ>,
19 {
20 SNumber::Float(self.q_as_float_nan_is_zero(sink).tan())
21 }
22 pub fn q_acos<Q>(&self, sink: &mut Q) -> SNumber
23 where
24 Q: QuirkSink<SNumberToFloatQ>,
25 {
26 SNumber::Float(self.q_as_float_nan_is_zero(sink).acos())
27 }
28 pub fn q_asin<Q>(&self, sink: &mut Q) -> SNumber
29 where
30 Q: QuirkSink<SNumberToFloatQ>,
31 {
32 SNumber::Float(self.q_as_float_nan_is_zero(sink).asin())
33 }
34 pub fn q_atan<Q>(&self, sink: &mut Q) -> SNumber
35 where
36 Q: QuirkSink<SNumberToFloatQ>,
37 {
38 SNumber::Float(self.q_as_float_nan_is_zero(sink).atan())
39 }
40}
41
42#[cfg(test)]
43mod tests {
44 use crate::SNumber;
45
46 #[test]
47 fn test_special_trig() {
48 for s in [SNumber::INFINITY, SNumber::NEG_INFINITY] {
49 assert_eq!(SNumber::NAN, s.q_cos(&mut ()));
50 assert_eq!(SNumber::NAN, s.q_sin(&mut ()));
51 assert_eq!(SNumber::NAN, s.q_tan(&mut ()));
52 }
53 }
54}