diff --git a/src/mol-io/reader/_spec/mol.spec.ts b/src/mol-io/reader/_spec/mol.spec.ts index 024dac2feee2d4f2a2002711da513cf5f284cd48..897794ea59cbaea3c6abdfe330fe258b2d1c37c2 100644 --- a/src/mol-io/reader/_spec/mol.spec.ts +++ b/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);