Browse Source

ADD: Test multiple charge lines in molfiles

ptourlas 3 years ago
parent
commit
1bd4d841a1
1 changed files with 39 additions and 0 deletions
  1. 39 0
      src/mol-io/reader/_spec/mol.spec.ts

+ 39 - 0
src/mol-io/reader/_spec/mol.spec.ts

@@ -1,3 +1,10 @@
+/**
+ * Copyright (c) 2019-2022 mol* contributors, licensed under MIT, See LICENSE file for more info.
+ *
+ * @author David Sehnal <david.sehnal@gmail.com>
+ * @author Alexander Rose <alexander.rose@weirdbyte.de>
+ * @author Panagiotis Tourlas <panagiot_tourlov@hotmail.com>
+ */
 
 import { parseMol, formalChargeMapper } from '../mol/parser';
 
@@ -76,6 +83,21 @@ const MolStringWithPropertyBlockCharge = `
 M  CHG  3   2  -1   3   1   4   1
 M  END`;
 
+const MolStringWithMultipleChargeLines = `
+  Ketcher  1 72215442D 1   1.00000     0.00000     0
+
+  4  3  0  0  0  0            999 V2000
+    0.0000    0.0000    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
+    0.8660    0.5000    0.0000 N   0  0  0  0  0  0  0  0  0  0  0  0
+   -0.8660    0.5000    0.0000 S   0  0  0  0  0  0  0  0  0  0  0  0
+    0.0000   -1.0000    0.0000 P   0  0  0  0  0  0  0  0  0  0  0  0
+  1  4  2  0  0  0  0
+  3  1  1  0  0  0  0
+  2  1  1  0  0  0  0
+M  CHG  1   2  -1
+M  CHG  2   3   1   4   1
+M  END`;
+
 describe('mol reader', () => {
     it('basic', async () => {
         const parsed = await parseMol(MolString).run();
@@ -113,6 +135,23 @@ describe('mol reader', () => {
         expect(formalCharges.charge.value(0)).toBe(-1);
         expect(formalCharges.charge.value(1)).toBe(1);
     });
+    it('multiple charge lines', async () => {
+        const parsed = await parseMol(MolStringWithMultipleChargeLines).run();
+        if (parsed.isError) {
+            throw new Error(parsed.message);
+        }
+        const { formalCharges } = parsed.result;
+
+        expect(formalCharges.atomIdx.rowCount).toBe(3);
+        expect(formalCharges.charge.rowCount).toBe(3);
+
+        expect(formalCharges.atomIdx.value(0)).toBe(2);
+        expect(formalCharges.atomIdx.value(1)).toBe(3);
+
+        expect(formalCharges.charge.value(0)).toBe(-1);
+        expect(formalCharges.charge.value(1)).toBe(1);
+    });
+
     it('atom block charge mapping', async () => {
         expect(formalChargeMapper(7)).toBe(-3);
         expect(formalChargeMapper(6)).toBe(-2);