#![no_main] use std::ops::Range; use libfuzzer_sys::fuzz_target; use rangeset_fuzz::{SmallSet, assert_invariants}; use rangeset::*; fn expected_union(a: Range, b: RangeSet) -> Vec { let mut expected_values = a.chain(b.iter()).collect::>(); expected_values.sort(); expected_values.dedup(); expected_values } fuzz_target!(|r: (Range, SmallSet)| { let r1 = r.0; let r2: RangeSet = r.1.into(); let expected_values = expected_union(r1.clone(), r2.clone()); let union = r1.union(&r2); let actual_values = union.iter().collect::>(); assert_eq!(expected_values, actual_values); assert_invariants(union); });