]> luflow.net public git repositories - flow-rbp.git/blob - tests/insert.rs
Initial commit.
[flow-rbp.git] / tests / insert.rs
1 // flow-rbp: A library for packing rectangles into two-dimensional finite bins.
2 // public domain License
3
4 use flow_rbp::FreeRectHeuristic;
5 use flow_rbp::RectsBinPack;
6
7 #[test]
8 fn insert_short_side_fit() {
9 let mut rbp = RectsBinPack::new(32, 32, false).unwrap();
10 assert_eq!(rbp.get_occupancy(), 0.0);
11
12 assert_eq!(
13 rbp.insert(16, 16, FreeRectHeuristic::ShortSideFit)
14 .is_some(),
15 true
16 );
17 assert_eq!(rbp.get_occupancy(), 0.25);
18 assert_eq!(
19 rbp.insert(16, 16, FreeRectHeuristic::ShortSideFit)
20 .is_some(),
21 true
22 );
23 assert_eq!(rbp.get_occupancy(), 0.5);
24 assert_eq!(
25 rbp.insert(16, 16, FreeRectHeuristic::ShortSideFit)
26 .is_some(),
27 true
28 );
29 assert_eq!(rbp.get_occupancy(), 0.75);
30 assert_eq!(
31 rbp.insert(16, 16, FreeRectHeuristic::ShortSideFit)
32 .is_some(),
33 true
34 );
35 assert_eq!(rbp.get_occupancy(), 1.0);
36
37 assert_eq!(
38 rbp.insert(1, 1, FreeRectHeuristic::ShortSideFit).is_none(),
39 true
40 );
41 }
42
43 #[test]
44 fn insert_short_side_fit_rotated() {
45 let mut rbp = RectsBinPack::new(32, 16, true).unwrap();
46 assert_eq!(rbp.get_occupancy(), 0.0);
47
48 assert_eq!(
49 rbp.insert(16, 32, FreeRectHeuristic::ShortSideFit)
50 .is_some(),
51 true
52 );
53 assert_eq!(rbp.get_occupancy(), 1.0);
54
55 assert_eq!(
56 rbp.insert(1, 1, FreeRectHeuristic::ShortSideFit).is_none(),
57 true
58 );
59 }
60
61 #[test]
62 fn insert_long_side_fit() {
63 let mut rbp = RectsBinPack::new(32, 32, false).unwrap();
64 assert_eq!(rbp.get_occupancy(), 0.0);
65
66 assert_eq!(
67 rbp.insert(16, 16, FreeRectHeuristic::LongSideFit).is_some(),
68 true
69 );
70 assert_eq!(rbp.get_occupancy(), 0.25);
71 assert_eq!(
72 rbp.insert(16, 16, FreeRectHeuristic::LongSideFit).is_some(),
73 true
74 );
75 assert_eq!(rbp.get_occupancy(), 0.5);
76 assert_eq!(
77 rbp.insert(16, 16, FreeRectHeuristic::LongSideFit).is_some(),
78 true
79 );
80 assert_eq!(rbp.get_occupancy(), 0.75);
81 assert_eq!(
82 rbp.insert(16, 16, FreeRectHeuristic::LongSideFit).is_some(),
83 true
84 );
85 assert_eq!(rbp.get_occupancy(), 1.0);
86
87 assert_eq!(
88 rbp.insert(1, 1, FreeRectHeuristic::LongSideFit).is_none(),
89 true
90 );
91 }
92
93 #[test]
94 fn insert_long_side_fit_rotated() {
95 let mut rbp = RectsBinPack::new(32, 16, true).unwrap();
96 assert_eq!(rbp.get_occupancy(), 0.0);
97
98 assert_eq!(
99 rbp.insert(16, 32, FreeRectHeuristic::LongSideFit).is_some(),
100 true
101 );
102 assert_eq!(rbp.get_occupancy(), 1.0);
103
104 assert_eq!(
105 rbp.insert(1, 1, FreeRectHeuristic::LongSideFit).is_none(),
106 true
107 );
108 }
109
110 #[test]
111 fn insert_area_fit() {
112 let mut rbp = RectsBinPack::new(32, 32, false).unwrap();
113 assert_eq!(rbp.get_occupancy(), 0.0);
114
115 assert_eq!(
116 rbp.insert(16, 16, FreeRectHeuristic::AreaFit).is_some(),
117 true
118 );
119 assert_eq!(rbp.get_occupancy(), 0.25);
120 assert_eq!(
121 rbp.insert(16, 16, FreeRectHeuristic::AreaFit).is_some(),
122 true
123 );
124 assert_eq!(rbp.get_occupancy(), 0.5);
125 assert_eq!(
126 rbp.insert(16, 16, FreeRectHeuristic::AreaFit).is_some(),
127 true
128 );
129 assert_eq!(rbp.get_occupancy(), 0.75);
130 assert_eq!(
131 rbp.insert(16, 16, FreeRectHeuristic::AreaFit).is_some(),
132 true
133 );
134 assert_eq!(rbp.get_occupancy(), 1.0);
135
136 assert_eq!(rbp.insert(1, 1, FreeRectHeuristic::AreaFit).is_none(), true);
137 }
138
139 #[test]
140 fn insert_area_fit_rotated() {
141 let mut rbp = RectsBinPack::new(32, 16, true).unwrap();
142 assert_eq!(rbp.get_occupancy(), 0.0);
143
144 assert_eq!(
145 rbp.insert(16, 32, FreeRectHeuristic::AreaFit).is_some(),
146 true
147 );
148 assert_eq!(rbp.get_occupancy(), 1.0);
149
150 assert_eq!(rbp.insert(1, 1, FreeRectHeuristic::AreaFit).is_none(), true);
151 }
152
153 #[test]
154 fn insert_bottom_left() {
155 let mut rbp = RectsBinPack::new(32, 32, false).unwrap();
156 assert_eq!(rbp.get_occupancy(), 0.0);
157
158 assert_eq!(
159 rbp.insert(16, 16, FreeRectHeuristic::BottomLeft).is_some(),
160 true
161 );
162 assert_eq!(rbp.get_occupancy(), 0.25);
163 assert_eq!(
164 rbp.insert(16, 16, FreeRectHeuristic::BottomLeft).is_some(),
165 true
166 );
167 assert_eq!(rbp.get_occupancy(), 0.5);
168 assert_eq!(
169 rbp.insert(16, 16, FreeRectHeuristic::BottomLeft).is_some(),
170 true
171 );
172 assert_eq!(rbp.get_occupancy(), 0.75);
173 assert_eq!(
174 rbp.insert(16, 16, FreeRectHeuristic::BottomLeft).is_some(),
175 true
176 );
177 assert_eq!(rbp.get_occupancy(), 1.0);
178
179 assert_eq!(
180 rbp.insert(1, 1, FreeRectHeuristic::BottomLeft).is_none(),
181 true
182 );
183 }
184
185 #[test]
186 fn insert_bottom_left_rotated() {
187 let mut rbp = RectsBinPack::new(32, 16, true).unwrap();
188 assert_eq!(rbp.get_occupancy(), 0.0);
189
190 assert_eq!(
191 rbp.insert(16, 32, FreeRectHeuristic::BottomLeft).is_some(),
192 true
193 );
194 assert_eq!(rbp.get_occupancy(), 1.0);
195
196 assert_eq!(
197 rbp.insert(1, 1, FreeRectHeuristic::BottomLeft).is_none(),
198 true
199 );
200 }
201
202 #[test]
203 fn insert_contact_point() {
204 let mut rbp = RectsBinPack::new(32, 32, false).unwrap();
205 assert_eq!(rbp.get_occupancy(), 0.0);
206
207 assert_eq!(
208 rbp.insert(16, 16, FreeRectHeuristic::ContactPoint)
209 .is_some(),
210 true
211 );
212 assert_eq!(rbp.get_occupancy(), 0.25);
213 assert_eq!(
214 rbp.insert(16, 16, FreeRectHeuristic::ContactPoint)
215 .is_some(),
216 true
217 );
218 assert_eq!(rbp.get_occupancy(), 0.5);
219 assert_eq!(
220 rbp.insert(16, 16, FreeRectHeuristic::ContactPoint)
221 .is_some(),
222 true
223 );
224 assert_eq!(rbp.get_occupancy(), 0.75);
225 assert_eq!(
226 rbp.insert(16, 16, FreeRectHeuristic::ContactPoint)
227 .is_some(),
228 true
229 );
230 assert_eq!(rbp.get_occupancy(), 1.0);
231
232 assert_eq!(
233 rbp.insert(1, 1, FreeRectHeuristic::ContactPoint).is_none(),
234 true
235 );
236 }
237
238 #[test]
239 fn insert_contact_point_rotated() {
240 let mut rbp = RectsBinPack::new(32, 16, true).unwrap();
241 assert_eq!(rbp.get_occupancy(), 0.0);
242
243 assert_eq!(
244 rbp.insert(16, 32, FreeRectHeuristic::ContactPoint)
245 .is_some(),
246 true
247 );
248 assert_eq!(rbp.get_occupancy(), 1.0);
249
250 assert_eq!(
251 rbp.insert(1, 1, FreeRectHeuristic::ContactPoint).is_none(),
252 true
253 );
254 }