public void TestAllSaturated_Formaldehyde()
        {
            // test Formaldehyde, CH2=O with explicit hydrogen
            var  m  = new AtomContainer();
            Atom c  = new Atom("C");
            Atom h1 = new Atom("H");
            Atom h2 = new Atom("H");
            Atom O  = new Atom("O");

            m.Atoms.Add(c);
            m.Atoms.Add(h1);
            m.Atoms.Add(h2);
            m.Atoms.Add(O);
            for (int i = 0; i < 2; i++)
            {
                LonePair lp = new LonePair(O);
                m.LonePairs.Add(lp);
            }
            m.Bonds.Add(new Bond(c, h1));
            m.Bonds.Add(new Bond(c, h2));
            m.Bonds.Add(new Bond(c, O, BondOrder.Double));
            AtomContainerManipulator.PercieveAtomTypesAndConfigureAtoms(m);

            Assert.IsTrue(CDK.LonePairElectronChecker.IsSaturated(m));
        }
        public void TestAllSaturated_Methanethiol()
        {
            // test Methanethiol, CH4S
            Atom c = new Atom("C")
            {
                ImplicitHydrogenCount = 3
            };
            Atom s = new Atom("S")
            {
                ImplicitHydrogenCount = 1
            };

            Bond b1 = new Bond(c, s, BondOrder.Single);

            var m = new AtomContainer();

            m.Atoms.Add(c);
            m.Atoms.Add(s);
            m.Bonds.Add(b1);
            for (int i = 0; i < 1; i++)
            {
                LonePair lp = new LonePair(s);
                m.LonePairs.Add(lp);
            }
            AtomContainerManipulator.PercieveAtomTypesAndConfigureAtoms(m);

            Assert.IsFalse(CDK.LonePairElectronChecker.IsSaturated(m));
        }
Beispiel #3
0
        public void TestDontDeleteSingleElectrons()
        {
            AtomContainer atomCon = new AtomContainer();
            // make two molecules; one with an LonePair, the other with a SingleElectron
            IAtomContainer mol1  = new AtomContainer();
            Atom           atom1 = new Atom("C");

            mol1.Atoms.Add(atom1);
            LonePair lp1 = new LonePair(atom1);

            mol1.LonePairs.Add(lp1);
            // mol2
            IAtomContainer mol2  = new AtomContainer();
            Atom           atom2 = new Atom("C");

            mol2.Atoms.Add(atom2);
            SingleElectron se2 = new SingleElectron(atom2);

            mol2.SingleElectrons.Add(se2);

            atomCon.Add(mol1);
            atomCon.Add(mol2);

            // now partition
            IChemObjectSet <IAtomContainer> moleculeSet = ConnectivityChecker.PartitionIntoMolecules(atomCon);

            Assert.IsNotNull(moleculeSet);
            Assert.AreEqual(2, moleculeSet.Count);

            Assert.IsTrue(ConnectivityChecker.IsConnected(moleculeSet[0]));
            Assert.IsTrue(ConnectivityChecker.IsConnected(moleculeSet[1]));

            // make sure
            Assert.AreEqual(1, moleculeSet[0].Atoms.Count);
            Assert.AreEqual(1, moleculeSet[0].GetElectronContainers().Count());
            Assert.AreEqual(1, moleculeSet[1].Atoms.Count);
            Assert.AreEqual(1, moleculeSet[1].GetElectronContainers().Count());
            // we don't know which partition contains the LP and which the electron
            Assert.IsTrue(moleculeSet[0].GetConnectedSingleElectrons(
                              moleculeSet[0].Atoms[0]).Count() == 0 ||
                          moleculeSet[1].GetConnectedSingleElectrons(
                              moleculeSet[1].Atoms[0]).Count() == 0);
            Assert.IsTrue(moleculeSet[0].GetConnectedLonePairs(
                              moleculeSet[0].Atoms[0]).Count() == 0 ||
                          moleculeSet[1].GetConnectedLonePairs(
                              moleculeSet[1].Atoms[0]).Count() == 0);
        }