MCPcopy Create free account
hub / github.com/Vector35/binaryninja-api / progress_recursive_split

Function progress_recursive_split

rust/src/progress.rs:225–270  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

223
224 #[test]
225 fn progress_recursive_split() {
226 let progress = Cell::new(0);
227 let callback = |p, _| {
228 progress.set(p);
229 true
230 };
231 let mut split = callback.split(&[25, 50, 25]);
232 // 0..=25
233 let mut split_instance = split.next_subpart().unwrap();
234 split_instance.progress(0, 100);
235 assert_eq!(progress.get(), 0);
236 split_instance.progress(100, 100);
237 assert_eq!(progress.get(), 25);
238 drop(split_instance);
239
240 // 25..=75, will get split into two parts: 25..=50 and 50..=75
241 {
242 let split_instance = split.next_subpart().unwrap();
243 let mut sub_split = split_instance.split(&[50, 50]);
244 // 25..=50
245 let mut sub_split_instance = sub_split.next_subpart().unwrap();
246 sub_split_instance.progress(0, 100);
247 assert_eq!(progress.get(), 25);
248 sub_split_instance.progress(100, 100);
249 assert_eq!(progress.get(), 50);
250 drop(sub_split_instance);
251
252 // 50..=75
253 let mut sub_split_instance = sub_split.next_subpart().unwrap();
254 sub_split_instance.progress(0, 100);
255 assert_eq!(progress.get(), 50);
256 sub_split_instance.progress(100, 100);
257 assert_eq!(progress.get(), 75);
258 drop(sub_split_instance);
259 }
260
261 // 75..=100
262 let mut split_instance = split.next_subpart().unwrap();
263 split_instance.progress(0, 100);
264 assert_eq!(progress.get(), 75);
265 split_instance.progress(100, 100);
266 assert_eq!(progress.get(), 100);
267 drop(split_instance);
268
269 assert!(split.next_subpart().is_none());
270 }
271}

Callers

nothing calls this directly

Calls 3

next_subpartMethod · 0.80
splitMethod · 0.45
progressMethod · 0.45

Tested by

no test coverage detected