public void CheckCanonicalIsUnique(Molecule molecule) { Console.Out.WriteLine("isUnique?" + molecule); AtomPermutor permutor = new AtomPermutor(molecule); string canonicalStringForm = null; bool isUnique = true; bool atLeastOneCanonicalExample = false; MoleculeSignature initialMolSig = new MoleculeSignature(molecule); if (initialMolSig.IsCanonicallyLabelled()) { atLeastOneCanonicalExample = true; canonicalStringForm = initialMolSig.ReconstructCanonicalEdgeString(); } foreach (Molecule permutation in permutor) { MoleculeSignature molSig = new MoleculeSignature(permutation); if (molSig.IsCanonicallyLabelled()) { string stringForm = molSig.ReconstructCanonicalEdgeString(); if (canonicalStringForm == null) { canonicalStringForm = stringForm; atLeastOneCanonicalExample = true; } else { if (canonicalStringForm.Equals(stringForm)) { continue; } else { // not unique if there is more than one string form isUnique = false; break; } } } } Assert.IsTrue(isUnique, "Canonical example is not unique"); Assert.IsTrue(atLeastOneCanonicalExample, "No canonical example"); }
public void ChoTest() { Molecule mol = new Molecule(); mol.AddAtom("C"); mol.AddAtom("H"); mol.AddAtom("O"); mol.AddSingleBond(0, 1); mol.AddSingleBond(0, 2); MoleculeSignature firstSig = new MoleculeSignature(mol, InvariantType.Integer); string firstSigString = firstSig.ToCanonicalString(); Console.Out.WriteLine(firstSigString); AtomPermutor permutor = new AtomPermutor(mol); foreach (Molecule pMol in permutor) { MoleculeSignature pSig = new MoleculeSignature(pMol, InvariantType.Integer); string pSigString = pSig.ToCanonicalString(); Console.Out.WriteLine(pSigString); } }