/* * Copyright (c) 2017 molio contributors, licensed under MIT, See LICENSE file for more info. * * @author Alexander Rose * @author David Sehnal */ import Gro from '../gro/index' const groString = `MD of 2 waters, t= 4.2 6 1WATER OW1 1 0.126 1.624 1.679 0.1227 -0.0580 0.0434 1WATER HW2 2 0.190 1.661 1.747 0.8085 0.3191 -0.7791 1WATER HW3 3 0.177 1.568 1.613 -0.9045 -2.6469 1.3180 2WATER OW1 4 1.275 0.053 0.622 0.2519 0.3140 -0.1734 2WATER HW2 5 1.337 0.002 0.680 -1.0641 -1.1349 0.0257 2WATER HW3 6 1.326 0.120 0.568 1.9427 -0.8216 -0.0244 1.82060 1.82060 1.82060` const groStringHighPrecision = `Generated by trjconv : 2168 system t= 15.00000 3 1ETH C1 1 2.735383 2.672010 1.450194 0.2345 -0.1622 0.2097 1ETH H11 2 0.015804 2.716597 1.460588 0.8528 -0.7984 0.6605 1ETH H12 3 2.744822 2.565544 1.409227 -2.3812 2.8618 1.8101 1.82060 1.82060 1.82060` describe('gro reader', () => { it('basic', () => { const parsed = Gro.parse(groString) if (parsed.isError) { console.log(parsed) } else { const groFile = parsed.result; const data = Gro.schema(groFile.blocks[0]); const { header, atoms } = data; if (header._isDefined) { expect(header.title.value(0)).toBe('MD of 2 waters') expect(header.timeInPs.value(0)).toBeCloseTo(4.2) expect(header.numberOfAtoms.value(0)).toBe(6) expect(header.boxX.value(0)).toBeCloseTo(1.82060) expect(header.boxY.value(0)).toBeCloseTo(1.82060) expect(header.boxZ.value(0)).toBeCloseTo(1.82060) } else { console.error('no header') } if (atoms._rowCount === 6) { expect(atoms.x.value(0)).toBeCloseTo(0.126); expect(atoms.y.value(0)).toBeCloseTo(1.624); expect(atoms.z.value(0)).toBeCloseTo(1.679); // TODO: check velocities when they are parsed. } else { console.error('no atoms'); } } }) it('high precision', () => { const parsed = Gro.parse(groStringHighPrecision) if (parsed.isError) { console.log(parsed) } else { const groFile = parsed.result; const data = Gro.schema(groFile.blocks[0]); const { header, atoms } = data; if (header._isDefined) { expect(header.title.value(0)).toBe('Generated by trjconv : 2168 system') expect(header.timeInPs.value(0)).toBeCloseTo(15) expect(header.numberOfAtoms.value(0)).toBe(3) expect(header.boxX.value(0)).toBeCloseTo(1.82060) expect(header.boxY.value(0)).toBeCloseTo(1.82060) expect(header.boxZ.value(0)).toBeCloseTo(1.82060) } else { console.error('no header') } if (atoms._rowCount === 3) { // TODO: test when high-prec parser is available // expect(atoms.x.value(1)).toBeCloseTo(0.015804, 0.00001); // expect(atoms.y.value(1)).toBeCloseTo(2.716597, 0.00001); // expect(atoms.z.value(1)).toBeCloseTo(1.460588, 0.00001); // TODO: check velocities when they are parsed. } else { console.error('no atoms'); } } }) });