Skip to content

Commit 2c9e82d

Browse files
committed
Add example to lib.rs and README.md.
1 parent 181af4f commit 2c9e82d

File tree

2 files changed

+102
-2
lines changed

2 files changed

+102
-2
lines changed

README.md

Lines changed: 50 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@ It is implemented on top of [petgraph](https://github.com/petgraph/petgraph)'s [
88

99
## Usage
1010

11-
Please see the [tests directory](https://github.com/mitchmindtree/daggy/tree/master/tests) for some basic usage examples.
12-
1311
Use daggy in your project by adding it to your `Cargo.toml` dependencies:
1412

1513
```toml
@@ -23,6 +21,56 @@ daggy = { version = "0.8.1", features = ["stable_dag"] }
2321
daggy = { version = "0.8.1", features = ["serde-1"] }
2422
```
2523

24+
## Examples
25+
26+
> Please see the [tests directory](https://github.com/mitchmindtree/daggy/tree/master/tests) for some basic usage examples.
27+
28+
Transitive reduction:
29+
30+
```rust
31+
use daggy::Dag;
32+
33+
let mut dag = Dag::<&str, &str>::new();
34+
35+
// Reduce edges:
36+
//
37+
// ```text
38+
// # Before: | # After:
39+
// |
40+
// a -> b ----. | a -> b ----.
41+
// | | | | |
42+
// |-> c ----|----. | '-> c |
43+
// | \ | | | \ |
44+
// | \ v | | \ v
45+
// |------>> d | | '> d
46+
// | \ v | \
47+
// '----------->> e | '> e
48+
// ```
49+
50+
let a = dag.add_node("a");
51+
52+
let (_, b) = dag.add_child(a, "a->b", "b");
53+
let (_, c) = dag.add_child(a, "a->c", "c");
54+
let (_, d) = dag.add_child(a, "a->d", "d");
55+
let (_, e) = dag.add_child(a, "a->e", "e");
56+
57+
dag.add_edge(b, d, "b->d").unwrap();
58+
59+
dag.add_edge(c, d, "c->d").unwrap();
60+
dag.add_edge(c, e, "c->e").unwrap();
61+
62+
dag.add_edge(d, e, "d->e").unwrap();
63+
64+
assert_eq!(dag.edge_count(), 8);
65+
66+
dag.transitive_reduce(vec![a]);
67+
68+
let mut edges = dag.graph().edge_weights().copied().collect::<Vec<_>>();
69+
edges.sort();
70+
assert_eq!(dag.edge_count(), 5);
71+
assert_eq!(&edges, &["a->b", "a->c", "b->d", "c->d", "d->e"]);
72+
```
73+
2674

2775
## License
2876

src/lib.rs

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,58 @@
2727
//! # Allows the `Dag` to be serialized and deserialized.
2828
//! daggy = { version = "0.8.1", features = ["serde-1"] }
2929
//! ```
30+
//!
31+
//! # Examples
32+
//!
33+
//! > Please see the [tests directory][4] for some basic usage examples.
34+
//!
35+
//! Transitive reduction:
36+
//!
37+
//! ```rust
38+
//! use daggy::Dag;
39+
//!
40+
//! let mut dag = Dag::<&str, &str>::new();
41+
//!
42+
//! // Reduce edges:
43+
//! //
44+
//! // ```text
45+
//! // # Before: | # After:
46+
//! // |
47+
//! // a -> b ----. | a -> b ----.
48+
//! // | | | | |
49+
//! // |-> c ----|----. | '-> c |
50+
//! // | \ | | | \ |
51+
//! // | \ v | | \ v
52+
//! // |------>> d | | '> d
53+
//! // | \ v | \
54+
//! // '----------->> e | '> e
55+
//! // ```
56+
//!
57+
//! let a = dag.add_node("a");
58+
//!
59+
//! let (_, b) = dag.add_child(a, "a->b", "b");
60+
//! let (_, c) = dag.add_child(a, "a->c", "c");
61+
//! let (_, d) = dag.add_child(a, "a->d", "d");
62+
//! let (_, e) = dag.add_child(a, "a->e", "e");
63+
//!
64+
//! dag.add_edge(b, d, "b->d").unwrap();
65+
//!
66+
//! dag.add_edge(c, d, "c->d").unwrap();
67+
//! dag.add_edge(c, e, "c->e").unwrap();
68+
//!
69+
//! dag.add_edge(d, e, "d->e").unwrap();
70+
//!
71+
//! assert_eq!(dag.edge_count(), 8);
72+
//!
73+
//! dag.transitive_reduce(vec![a]);
74+
//!
75+
//! let mut edges = dag.graph().edge_weights().copied().collect::<Vec<_>>();
76+
//! edges.sort();
77+
//! assert_eq!(dag.edge_count(), 5);
78+
//! assert_eq!(&edges, &["a->b", "a->c", "b->d", "c->d", "d->e"]);
79+
//! ```
80+
//!
81+
//! [4]: https://github.com/mitchmindtree/daggy/tree/master/tests
3082
3183
#![forbid(unsafe_code)]
3284
#![warn(missing_docs)]

0 commit comments

Comments
 (0)