num_valid/functions/
neg_assign.rs1#![deny(rustdoc::broken_intra_doc_links)]
2
3use num::Complex;
4
5pub trait NegAssign {
8 fn neg_assign(&mut self);
10}
11
12#[duplicate::duplicate_item(
13 T;
14 [f64];
15 [Complex<f64>];
16)]
17impl NegAssign for T {
19 fn neg_assign(&mut self) {
21 *self = -*self;
22 }
23}
24
25#[cfg(test)]
29mod tests {
30 use super::*;
31 use num::Complex;
32
33 mod native64 {
34 use super::*;
35
36 #[test]
37 fn test_neg_assign_f64() {
38 let mut value = 1.0_f64;
39 value.neg_assign();
40 let expected_value = -1.0_f64;
41 assert_eq!(value, expected_value);
42
43 let mut value = -2.0_f64;
44 value.neg_assign();
45 let expected_value = 2.0_f64;
46 assert_eq!(value, expected_value);
47 }
48
49 #[test]
50 fn test_neg_assign_complex_f64() {
51 let mut value = Complex::new(1.0, -2.0);
52 value.neg_assign();
53 let expected_value = Complex::new(-1.0, 2.0);
54 assert_eq!(value, expected_value);
55
56 let mut value = Complex::new(-3.0, 4.0);
57 value.neg_assign();
58 let expected_value = Complex::new(3.0, -4.0);
59 assert_eq!(value, expected_value);
60 }
61 }
62
63 #[cfg(feature = "rug")]
64 mod rug53 {
65 use super::*;
66 use crate::kernels::rug::{ComplexRugStrictFinite, RealRugStrictFinite};
67 use rug::Float;
68 use try_create::New;
69
70 const PRECISION: u32 = 53;
71
72 #[test]
73 fn test_neg_assign_real_rug() {
74 let mut value = RealRugStrictFinite::<PRECISION>::new(Float::with_val(PRECISION, 1.0));
75 value.neg_assign();
76 let expected_value =
77 RealRugStrictFinite::<PRECISION>::new(Float::with_val(PRECISION, -1.0));
78 assert_eq!(value, expected_value);
79
80 let mut value = RealRugStrictFinite::<PRECISION>::new(Float::with_val(PRECISION, -2.0));
81 value.neg_assign();
82 let expected_value =
83 RealRugStrictFinite::<PRECISION>::new(Float::with_val(PRECISION, 2.0));
84 assert_eq!(value, expected_value);
85 }
86
87 #[test]
88 fn test_neg_assign_complex_rug() {
89 let mut value = ComplexRugStrictFinite::<PRECISION>::new(rug::Complex::with_val(
90 PRECISION,
91 (
92 Float::with_val(PRECISION, 1.0),
93 Float::with_val(PRECISION, -2.0),
94 ),
95 ));
96 value.neg_assign();
97 let expected_value = ComplexRugStrictFinite::<PRECISION>::new(rug::Complex::with_val(
98 PRECISION,
99 (
100 Float::with_val(PRECISION, -1.0),
101 Float::with_val(PRECISION, 2.0),
102 ),
103 ));
104 assert_eq!(value, expected_value);
105
106 let mut value = ComplexRugStrictFinite::<PRECISION>::new(rug::Complex::with_val(
107 PRECISION,
108 (
109 Float::with_val(PRECISION, -3.0),
110 Float::with_val(PRECISION, 4.0),
111 ),
112 ));
113 value.neg_assign();
114 let expected_value = ComplexRugStrictFinite::<PRECISION>::new(rug::Complex::with_val(
115 PRECISION,
116 (
117 Float::with_val(PRECISION, 3.0),
118 Float::with_val(PRECISION, -4.0),
119 ),
120 ));
121 assert_eq!(value, expected_value);
122 }
123 }
124}
125