use doublets::{
decorators::{DecoratorsExt, Resolve},
mem, unit, Doublets, DoubletsExt, Error,
};
const DUPLICATES: usize = 8;
fn main() -> Result<(), Error<usize>> {
without_a_policy()?;
with_uniqueness_resolution()
}
fn without_a_policy() -> Result<(), Error<usize>> {
let mut store = unit::Store::<usize, _>::new(mem::Global::new())?;
let a = store.create_point()?;
let b = store.create_point()?;
let created: Vec<_> = (0..DUPLICATES)
.map(|_| store.create_link(a, b))
.collect::<Result<_, _>>()?;
println!("bare store:");
println!(" create_link({a}, {b}) x{DUPLICATES} -> {created:?}");
println!(" count = {}", store.count());
println!(" deleting any of them now panics in `platform-trees` (issue #57)");
println!();
Ok(())
}
fn with_uniqueness_resolution() -> Result<(), Error<usize>> {
let mut store = unit::Store::<usize, _>::new(mem::Global::new())?.with_uniqueness(Resolve);
let a = store.create_point()?;
let b = store.create_point()?;
let created: Vec<_> = (0..DUPLICATES)
.map(|_| store.create_link(a, b))
.collect::<Result<_, _>>()?;
println!("with_uniqueness(Resolve):");
println!(" create_link({a}, {b}) x{DUPLICATES} -> {created:?}");
println!(" count = {}", store.count());
let ab = created[0];
store.delete(ab)?;
println!(" delete({ab}) -> ok, count = {}", store.count());
println!(" links = {:?}", store.iter().collect::<Vec<_>>());
Ok(())
}