1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
pub mod complex; #[cfg(test)] mod tests { use super::*; fn create_complex_pair() -> (complex::Complex, complex::Complex) { let c1 = complex::Complex::new(1.0, 5.0); let c2 = complex::Complex::new(3.0, 2.0); (c1, c2) } #[test] fn generation() { let pol = complex::Polar { r: 1.0, theta: 0.0, }; let actual = pol.to_complex(); let expected = complex::Complex::new(1.0, 0.0); assert!(actual == expected); let actual = complex::Complex::i(); let expected = complex::Complex::new(0.0, 1.0); assert!(actual == expected); } #[test] fn comparison() { let (c1, c2) = create_complex_pair(); let c3 = complex::Complex::new(c1.real, c1.img); assert!(c1 != c2); assert!(c1 == c3); } #[test] fn arithmetic() { let (c1, c2) = create_complex_pair(); let actual = c1 + c2; let expected = complex::Complex::new(4.0, 7.0); assert!(actual == expected); let actual = c1 - c2; let expected = complex::Complex::new(-2.0, 3.0); assert!(actual == expected); let actual = c1 * c2; let expected = complex::Complex::new(-7.0, 17.0); assert!(actual == expected); let actual = c1 / c2; let expected = complex::Complex::new(1.0, 1.0); assert!(actual == expected); } #[test] fn functions() { let (c1, _) = create_complex_pair(); let actual = c1.conjugate(); let expected = complex::Complex::new(c1.real, -c1.img); assert!(actual == expected); let c4 = complex::Complex::new(3.0, 1.0); let actual = c4.cos(); let expected = complex::Complex::new(((c4.real).cos()*(c4.img).cosh()), (-(c4.real).sin()*(c4.img).sinh())); assert!(actual == expected); let actual = c4.sin(); let expected = complex::Complex::new((c4.real).sin()*(c4.img).cosh(), -(c4.real).cos()*(c4.img).sinh()); assert!(actual == expected); } }