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}