1 // flow-rbp: A library for packing rectangles into two-dimensional finite bins.
2 // public domain License
4 use flow_rbp::FreeRectHeuristic;
5 use flow_rbp::RectsBinPack;
8 fn insert_short_side_fit() {
9 let mut rbp = RectsBinPack::new(32, 32, false).unwrap();
10 assert_eq!(rbp.get_occupancy(), 0.0);
13 rbp.insert(16, 16, FreeRectHeuristic::ShortSideFit)
17 assert_eq!(rbp.get_occupancy(), 0.25);
19 rbp.insert(16, 16, FreeRectHeuristic::ShortSideFit)
23 assert_eq!(rbp.get_occupancy(), 0.5);
25 rbp.insert(16, 16, FreeRectHeuristic::ShortSideFit)
29 assert_eq!(rbp.get_occupancy(), 0.75);
31 rbp.insert(16, 16, FreeRectHeuristic::ShortSideFit)
35 assert_eq!(rbp.get_occupancy(), 1.0);
38 rbp.insert(1, 1, FreeRectHeuristic::ShortSideFit).is_none(),
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);
49 rbp.insert(16, 32, FreeRectHeuristic::ShortSideFit)
53 assert_eq!(rbp.get_occupancy(), 1.0);
56 rbp.insert(1, 1, FreeRectHeuristic::ShortSideFit).is_none(),
62 fn insert_long_side_fit() {
63 let mut rbp = RectsBinPack::new(32, 32, false).unwrap();
64 assert_eq!(rbp.get_occupancy(), 0.0);
67 rbp.insert(16, 16, FreeRectHeuristic::LongSideFit).is_some(),
70 assert_eq!(rbp.get_occupancy(), 0.25);
72 rbp.insert(16, 16, FreeRectHeuristic::LongSideFit).is_some(),
75 assert_eq!(rbp.get_occupancy(), 0.5);
77 rbp.insert(16, 16, FreeRectHeuristic::LongSideFit).is_some(),
80 assert_eq!(rbp.get_occupancy(), 0.75);
82 rbp.insert(16, 16, FreeRectHeuristic::LongSideFit).is_some(),
85 assert_eq!(rbp.get_occupancy(), 1.0);
88 rbp.insert(1, 1, FreeRectHeuristic::LongSideFit).is_none(),
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);
99 rbp.insert(16, 32, FreeRectHeuristic::LongSideFit).is_some(),
102 assert_eq!(rbp.get_occupancy(), 1.0);
105 rbp.insert(1, 1, FreeRectHeuristic::LongSideFit).is_none(),
111 fn insert_area_fit() {
112 let mut rbp = RectsBinPack::new(32, 32, false).unwrap();
113 assert_eq!(rbp.get_occupancy(), 0.0);
116 rbp.insert(16, 16, FreeRectHeuristic::AreaFit).is_some(),
119 assert_eq!(rbp.get_occupancy(), 0.25);
121 rbp.insert(16, 16, FreeRectHeuristic::AreaFit).is_some(),
124 assert_eq!(rbp.get_occupancy(), 0.5);
126 rbp.insert(16, 16, FreeRectHeuristic::AreaFit).is_some(),
129 assert_eq!(rbp.get_occupancy(), 0.75);
131 rbp.insert(16, 16, FreeRectHeuristic::AreaFit).is_some(),
134 assert_eq!(rbp.get_occupancy(), 1.0);
136 assert_eq!(rbp.insert(1, 1, FreeRectHeuristic::AreaFit).is_none(), true);
140 fn insert_area_fit_rotated() {
141 let mut rbp = RectsBinPack::new(32, 16, true).unwrap();
142 assert_eq!(rbp.get_occupancy(), 0.0);
145 rbp.insert(16, 32, FreeRectHeuristic::AreaFit).is_some(),
148 assert_eq!(rbp.get_occupancy(), 1.0);
150 assert_eq!(rbp.insert(1, 1, FreeRectHeuristic::AreaFit).is_none(), true);
154 fn insert_bottom_left() {
155 let mut rbp = RectsBinPack::new(32, 32, false).unwrap();
156 assert_eq!(rbp.get_occupancy(), 0.0);
159 rbp.insert(16, 16, FreeRectHeuristic::BottomLeft).is_some(),
162 assert_eq!(rbp.get_occupancy(), 0.25);
164 rbp.insert(16, 16, FreeRectHeuristic::BottomLeft).is_some(),
167 assert_eq!(rbp.get_occupancy(), 0.5);
169 rbp.insert(16, 16, FreeRectHeuristic::BottomLeft).is_some(),
172 assert_eq!(rbp.get_occupancy(), 0.75);
174 rbp.insert(16, 16, FreeRectHeuristic::BottomLeft).is_some(),
177 assert_eq!(rbp.get_occupancy(), 1.0);
180 rbp.insert(1, 1, FreeRectHeuristic::BottomLeft).is_none(),
186 fn insert_bottom_left_rotated() {
187 let mut rbp = RectsBinPack::new(32, 16, true).unwrap();
188 assert_eq!(rbp.get_occupancy(), 0.0);
191 rbp.insert(16, 32, FreeRectHeuristic::BottomLeft).is_some(),
194 assert_eq!(rbp.get_occupancy(), 1.0);
197 rbp.insert(1, 1, FreeRectHeuristic::BottomLeft).is_none(),
203 fn insert_contact_point() {
204 let mut rbp = RectsBinPack::new(32, 32, false).unwrap();
205 assert_eq!(rbp.get_occupancy(), 0.0);
208 rbp.insert(16, 16, FreeRectHeuristic::ContactPoint)
212 assert_eq!(rbp.get_occupancy(), 0.25);
214 rbp.insert(16, 16, FreeRectHeuristic::ContactPoint)
218 assert_eq!(rbp.get_occupancy(), 0.5);
220 rbp.insert(16, 16, FreeRectHeuristic::ContactPoint)
224 assert_eq!(rbp.get_occupancy(), 0.75);
226 rbp.insert(16, 16, FreeRectHeuristic::ContactPoint)
230 assert_eq!(rbp.get_occupancy(), 1.0);
233 rbp.insert(1, 1, FreeRectHeuristic::ContactPoint).is_none(),
239 fn insert_contact_point_rotated() {
240 let mut rbp = RectsBinPack::new(32, 16, true).unwrap();
241 assert_eq!(rbp.get_occupancy(), 0.0);
244 rbp.insert(16, 32, FreeRectHeuristic::ContactPoint)
248 assert_eq!(rbp.get_occupancy(), 1.0);
251 rbp.insert(1, 1, FreeRectHeuristic::ContactPoint).is_none(),