use open_hypergraphs::category::*;
use open_hypergraphs::strict::open_hypergraph::*;
use crate::hypergraph::equality::assert_hypergraph_equality_invariants;
use crate::theory::meaningless::*;
use proptest::proptest;
proptest! {
#[test]
fn test_dagger(f in arb_open_hypergraph()) {
let g = f.dagger();
assert_eq!(f.source(), g.target());
assert_eq!(f.target(), g.source());
assert_eq!(f.s, g.t);
assert_eq!(f.t, g.s);
assert_hypergraph_equality_invariants(&f.h, &g.h);
}
#[test]
fn test_spider_discrete((s, t, w) in arb_labeled_cospan()) {
let f = OpenHypergraph::<_, _, Arr>::spider(s, t, w).unwrap();
assert!(f.h.is_discrete());
}
#[test]
fn test_spider_composed_dagger_node_count((s, t, w) in arb_labeled_cospan()) {
let s = OpenHypergraph::<_, _, Arr>::spider(s, t, w).unwrap();
let f = s.compose(&s.dagger()).unwrap();
assert_eq!(f.source(), s.source());
assert_eq!(f.target(), s.source());
assert!(f.h.w.len() <= s.h.w.len() * 2);
}
}