diff --git a/src/undirected_graph.rs b/src/undirected_graph.rs
index 47fdde6b94950ae9a2afc3b0b727cd10d6890ee7..453a88e262fbcc687fef42b14e40f18750d16a46 100644
--- a/src/undirected_graph.rs
+++ b/src/undirected_graph.rs
@@ -8,12 +8,16 @@ pub struct UndirectedGraph {
 
 impl UndirectedGraph {
     pub fn new(num_vertices: usize, edges: Vec<(usize, usize)>) -> Self {
+        let mut edges_seen: HashSet<(usize, usize)> = HashSet::new();
         for (a, b) in &edges {
-            assert!(*a < num_vertices && *b < num_vertices, "Edges must be between vertices labeled from 0 to (num_vertices - 1)");
+            assert!(
+                *a < num_vertices && *b < num_vertices,
+                "Edges must be between vertices labeled from 0 to (num_vertices - 1)"
+            );
             assert!(*a != *b, "Tadpoles are not allowed");
             assert!(*b > *a, "Edge endpoints must be in increasing order");
+            assert!(edges_seen.insert((*a, *b)), "Double edges are not allowed");
         }
-        // TODO: Check there are no double edges.
         UndirectedGraph {
             num_vertices,
             edges,