graaf/op/complement.rs
1//! Generate a digraph's complement.
2//!
3//! A digraph's complement contains all arcs not in the original digraph.
4//!
5//! # Examples
6//!
7//! ```
8//! use graaf::{
9//! AdjacencyList,
10//! Arcs,
11//! Circuit,
12//! Complement,
13//! };
14//!
15//! let digraph = AdjacencyList::circuit(4);
16//! let converse = digraph.complement();
17//!
18//! assert!(converse.arcs().eq([
19//! (0, 2),
20//! (0, 3),
21//! (1, 0),
22//! (1, 3),
23//! (2, 0),
24//! (2, 1),
25//! (3, 1),
26//! (3, 2)
27//! ]));
28//! ```
29
30/// Digraph complement
31pub trait Complement {
32 /// Generate the digraph's complement.
33 ///
34 /// # Examples
35 ///
36 /// ```
37 /// use graaf::{
38 /// AdjacencyList,
39 /// Arcs,
40 /// Circuit,
41 /// Complement,
42 /// };
43 ///
44 /// let digraph = AdjacencyList::circuit(4);
45 /// let converse = digraph.complement();
46 ///
47 /// assert!(converse.arcs().eq([
48 /// (0, 2),
49 /// (0, 3),
50 /// (1, 0),
51 /// (1, 3),
52 /// (2, 0),
53 /// (2, 1),
54 /// (3, 1),
55 /// (3, 2)
56 /// ]));
57 /// ```
58 #[must_use]
59 fn complement(&self) -> Self;
60}