From 1ca103f6fb44e546028adc5c3b8bb3bcd9d113f5 Mon Sep 17 00:00:00 2001 From: Zepei Xu <xuzepei19950617@gmail.com> Date: Thu, 5 Oct 2017 18:49:58 -0700 Subject: [PATCH] added unit tests, made some notes --- src/reader/mol2/parser.ts | 11 ++++++ src/reader/mol2/schema.d.ts | 1 + src/reader/spec/mol2.spec.ts | 67 ++++++++++++++++++++++++++++++++++++ 3 files changed, 79 insertions(+) create mode 100644 src/reader/spec/mol2.spec.ts diff --git a/src/reader/mol2/parser.ts b/src/reader/mol2/parser.ts index b63939f64..035f1f5da 100644 --- a/src/reader/mol2/parser.ts +++ b/src/reader/mol2/parser.ts @@ -6,6 +6,17 @@ import Result from '../result' import Computation from '../../utils/computation' ////////// not using this +/*////////////////////////// NOTES ////////////////////////////// + Not using async, wait, promises, computation, chunker. + Formatting is not clear, different exmaples mol2 files has different field sizes, so making +columns using col() is not possible. Need to implement checks for optional columns, but not clear +about the names of each entry in a row in the example files. + Don't know when to use str and when to use pooledStr + Unlike gro file, mol2 file don't save 'hasSomthing' properties in the header-like Molecule +///////////////////////////////////////////////////////////////*/ + + + interface State { tokenizer: Tokenizer, diff --git a/src/reader/mol2/schema.d.ts b/src/reader/mol2/schema.d.ts index 7f1e73fb2..a34dc9f9e 100644 --- a/src/reader/mol2/schema.d.ts +++ b/src/reader/mol2/schema.d.ts @@ -25,6 +25,7 @@ export interface Molecule { charge_type: string status_bits: string mol_comment: string + ///////////// precisions are not saved for later use, and there is not 'hasSomthing' properties } export interface Atoms { diff --git a/src/reader/spec/mol2.spec.ts b/src/reader/spec/mol2.spec.ts new file mode 100644 index 000000000..675f41a69 --- /dev/null +++ b/src/reader/spec/mol2.spec.ts @@ -0,0 +1,67 @@ + + +import Mol2 from '../mol2/parser' + +const Mol2String = `@<TRIPOS>MOLECULE +5816 + 26 26 0 0 0 +SMALL +GASTEIGER + +@<TRIPOS>ATOM + 1 O 1.7394 -2.1169 -1.0894 O.3 1 LIG1 -0.3859 + 2 O -2.2941 1.0781 -1.7979 O.3 1 LIG1 -0.5033 +@<TRIPOS>BOND + 1 1 5 1 + 2 1 21 1` + + +////////// nothing works until add async and await and promise to parser.mol2 file. +describe('mol2 reader', () => { + it('basic', async () => { + const parsed = await Mol2(Mol2String)(); + + if (parsed.isError) { + console.log(parsed) + return; + } + + const mol2File = parsed.result; + const data = mol2File.structures[0]; + + const { molecule, atoms, bonds } = data; + + expect(molecule.mol_name).toBe(5816) + expect(molecule.num_atoms).toBe(26) + expect(molecule.num_bonds).toBe(26); + expect(molecule.num_subst).toBe(0); + expect(molecule.num_feat).toBe(0); + expect(molecule.num_sets).toBe(0); + expect(molecule.mol_type).toBe("") + expect(molecule.charge_type).toBe(""); + expect(molecule.status_bits).toBe(""); + expect(molecule.mol_comment).toBe(""); + + expect(atoms.count).toBe(2); + expect(atoms.atom_id.value(0)).toBe(1); + expect(atoms.atom_name.value(0)).toBe('o'); + expect(atoms.x.value(0)).toBeCloseTo(1.7394, 0.001); + expect(atoms.y.value(0)).toBeCloseTo(-2.1169, 0.0001); + expect(atoms.z.value(0)).toBeCloseTo(-1.0893, 0.0001); + expect(atoms.atom_type.value(0)).toBe(''); + ///// optionals + expect(atoms.subst_id.value(0)).toBe(0); + expect(atoms.subst_name.value(0)).toBe(''); + expect(atoms.charge.value(0)).toBeCloseTo(0.000); + expect(atoms.status_bits.value(0)).toBe(''); + + expect(bonds.count).toBe(2); + expect(bonds.bond_id.value(0)).toBe(1); + expect(bonds.origin_atom_id.value(0)).toBe(1); + expect(bonds.target_atom_id.value(0)).toBe(5); + expect(bonds.bond_type.value(0)).toBe('1'); + /////// optional + expect(bonds.status_bits.value(0)).toBe(''); + + }); +}); -- GitLab