message: ADD: Test multiple charge lines in molfiles
diff: +/**
  + * 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);
  