1use crate::point::Point;
2
3#[derive(Debug, Clone, Copy)]
23pub struct Triangle {
24 pub first_point: Point,
26 pub second_point: Point,
28 pub third_point: Point,
30}
31
32impl PartialEq for Triangle {
33 fn eq(&self, other: &Self) -> bool {
34 self.first_point.eq(&other.first_point) && self.second_point.eq(&other.second_point) && self.third_point.eq(&other.third_point)
35 }
36}
37
38impl Triangle {
39 pub fn new(first_point: Point, second_point: Point, third_point: Point) -> Triangle { Triangle { first_point, second_point, third_point } }
57}
58
59#[cfg(test)]
60mod tests {
61 use super::*;
62
63 #[test]
64 fn test_new() {
65 let result = Triangle::new(
66 Point::new(0.0, 0.0, 0.0),
67 Point::new(10.0, 0.0, 0.0),
68 Point::new(10.0, -15.0, 0.0));
69 assert_eq!(result.first_point.eq(&Point::new(0.0, 0.0, 0.0)), true);
70 assert_eq!(result.second_point.eq(&Point::new(10.0, 0.0, 0.0)), true);
71 assert_eq!(result.third_point.eq(&Point::new(10.0, -15.0, 0.0)), true);
72 }
73
74 #[test]
75 fn test_partialeq_true() {
76 let a = Triangle::new(
77 Point::new(0.0, 0.0, 0.0),
78 Point::new(10.0, 0.0, 0.0),
79 Point::new(10.0, -15.0, 0.0));
80 let b = Triangle::new(
81 Point::new(0.0, 0.0, 0.0),
82 Point::new(10.0, 0.0, 0.0),
83 Point::new(10.0, -15.0, 0.0));
84 assert_eq!(a.eq(&b), true);
85 assert_eq!(b.eq(&a), true);
86 }
87
88 #[test]
89 fn test_partialeq_first_different_false() {
90 let a = Triangle::new(
91 Point::new(0.0, 0.0, 0.0),
92 Point::new(10.0, 0.0, 0.0),
93 Point::new(10.0, -15.0, 0.0));
94 let b = Triangle::new(
95 Point::new(0.0, 0.0, -7.0),
96 Point::new(10.0, 0.0, 0.0),
97 Point::new(10.0, -15.0, 0.0));
98 assert_eq!(a.eq(&b), false);
99 assert_eq!(b.eq(&a), false);
100 }
101
102 #[test]
103 fn test_partialeq_second_different_false() {
104 let a = Triangle::new(
105 Point::new(0.0, 0.0, 0.0),
106 Point::new(10.0, 0.0, 0.0),
107 Point::new(10.0, -15.0, 0.0));
108 let b = Triangle::new(
109 Point::new(0.0, 0.0, 0.0),
110 Point::new(10.0, 2.1, 0.0),
111 Point::new(10.0, -15.0, 0.0));
112 assert_eq!(a.eq(&b), false);
113 assert_eq!(b.eq(&a), false);
114 }
115
116 #[test]
117 fn test_partialeq_third_different_false() {
118 let a = Triangle::new(
119 Point::new(0.0, 0.0, 0.0),
120 Point::new(10.0, 0.0, 0.0),
121 Point::new(10.0, -15.0, 0.0));
122 let b = Triangle::new(
123 Point::new(0.0, 0.0, 0.0),
124 Point::new(10.0, 0.0, 0.0),
125 Point::new(101.0, -15.0, 0.0));
126 assert_eq!(a.eq(&b), false);
127 assert_eq!(b.eq(&a), false);
128 }
129
130 #[test]
131 fn test_partialeq_all_different_false() {
132 let a = Triangle::new(
133 Point::new(0.0, 0.0, 0.0),
134 Point::new(10.0, 0.0, 0.0),
135 Point::new(10.0, -15.0, 0.0));
136 let b = Triangle::new(
137 Point::new(0.0, -0.1, 0.0),
138 Point::new(-10.0, 0.0, 5.0),
139 Point::new(101.0, 76.0, 0.0));
140 assert_eq!(a.eq(&b), false);
141 assert_eq!(b.eq(&a), false);
142 }
143}