Merge pull request #259 from noctune/csr-add-node-bug
Fix bug where Csr::add_node adds existing edges to new node
diff --git a/src/csr.rs b/src/csr.rs
index 1ce87cc..dad2d38 100644
--- a/src/csr.rs
+++ b/src/csr.rs
@@ -269,7 +269,7 @@
/// Adds a new node with the given weight, returning the corresponding node index.
pub fn add_node(&mut self, weight: N) -> NodeIndex<Ix> {
let i = self.row.len() - 1;
- self.row.insert(i, 0);
+ self.row.insert(i, self.column.len());
self.node_weights.insert(i, weight);
Ix::new(i)
}
@@ -937,4 +937,25 @@
assert_eq!(g.edge_count(), 3);
}
+
+ #[test]
+ fn test_add_node_with_existing_edges() {
+ let mut g: Csr = Csr::new();
+ let a = g.add_node(());
+ let b = g.add_node(());
+
+ assert!(g.add_edge(a, b, ()));
+
+ let c = g.add_node(());
+
+ println!("{:?}", g);
+
+ assert_eq!(g.node_count(), 3);
+
+ assert_eq!(g.neighbors_slice(a), &[b]);
+ assert_eq!(g.neighbors_slice(b), &[]);
+ assert_eq!(g.neighbors_slice(c), &[]);
+
+ assert_eq!(g.edge_count(), 1);
+ }
}