From 52f235548a879251aad638cd727fc8892d81baf0 Mon Sep 17 00:00:00 2001
From: James Graham <J.A.Graham@soton.ac.uk>
Date: Thu, 6 Apr 2017 15:31:20 +0100
Subject: [PATCH] Add proper error message if atom is defined multiple times in
 a single bond Add test file required for previous commit

---
 pycgtool/bondset.py           | 4 ++++
 test/data/duplicate_atoms.bnd | 3 +++
 test/data/nosections.cfg      | 3 +++
 test/test_bondset.py          | 4 ++++
 4 files changed, 14 insertions(+)
 create mode 100644 test/data/duplicate_atoms.bnd
 create mode 100644 test/data/nosections.cfg

diff --git a/pycgtool/bondset.py b/pycgtool/bondset.py
index e4faef5..972e053 100644
--- a/pycgtool/bondset.py
+++ b/pycgtool/bondset.py
@@ -147,6 +147,10 @@ class BondSet:
                         func_form = functional_forms[atomlist[-1]]
                     except AttributeError:
                         func_form = self._functional_forms[len(atomlist)]
+
+                    if {x for x in atomlist if atomlist.count(x) > 1}:
+                        raise ValueError("Defined bond '{0}' contains duplicate atoms".format(atomlist))
+
                     mol_bonds.append(Bond(atoms=atomlist, func_form=func_form))
                     if len(atomlist) > 2:
                         angles_defined = True
diff --git a/test/data/duplicate_atoms.bnd b/test/data/duplicate_atoms.bnd
new file mode 100644
index 0000000..3b7dce9
--- /dev/null
+++ b/test/data/duplicate_atoms.bnd
@@ -0,0 +1,3 @@
+[test]
+A1 A2
+A2 A2
diff --git a/test/data/nosections.cfg b/test/data/nosections.cfg
new file mode 100644
index 0000000..791e349
--- /dev/null
+++ b/test/data/nosections.cfg
@@ -0,0 +1,3 @@
+hello
+I have no sections
+This is wrong
diff --git a/test/test_bondset.py b/test/test_bondset.py
index c9a1e18..7394917 100644
--- a/test/test_bondset.py
+++ b/test/test_bondset.py
@@ -195,3 +195,7 @@ class BondSetTest(unittest.TestCase):
         logging.disable(logging.NOTSET)
 
         self.assertTrue(cmp_whitespace_float("sugar_out.itp", "test/data/sugar_out.itp", float_rel_error=0.001))
+
+    def test_duplicate_atoms_in_bond(self):
+        with self.assertRaises(ValueError):
+            bondset = BondSet("test/data/duplicate_atoms.bnd", DummyOptions)
-- 
GitLab