public void TestAromaticSaturation()
        {
            var mol = builder.NewAtomContainer();

            mol.Atoms.Add(builder.NewAtom("C"));                       // 0
            mol.Atoms.Add(builder.NewAtom("C"));                       // 1
            mol.Atoms.Add(builder.NewAtom("C"));                       // 2
            mol.Atoms.Add(builder.NewAtom("C"));                       // 3
            mol.Atoms.Add(builder.NewAtom("C"));                       // 4
            mol.Atoms.Add(builder.NewAtom("C"));                       // 5
            mol.Atoms.Add(builder.NewAtom("C"));                       // 6
            mol.Atoms.Add(builder.NewAtom("C"));                       // 7

            mol.AddBond(mol.Atoms[0], mol.Atoms[1], BondOrder.Single); // 1
            mol.AddBond(mol.Atoms[1], mol.Atoms[2], BondOrder.Single); // 2
            mol.AddBond(mol.Atoms[2], mol.Atoms[3], BondOrder.Single); // 3
            mol.AddBond(mol.Atoms[3], mol.Atoms[4], BondOrder.Single); // 4
            mol.AddBond(mol.Atoms[4], mol.Atoms[5], BondOrder.Single); // 5
            mol.AddBond(mol.Atoms[5], mol.Atoms[0], BondOrder.Single); // 6
            mol.AddBond(mol.Atoms[0], mol.Atoms[6], BondOrder.Single); // 7
            mol.AddBond(mol.Atoms[6], mol.Atoms[7], BondOrder.Triple); // 8

            for (int f = 0; f < 6; f++)
            {
                mol.Atoms[f].IsAromatic    = true;
                mol.Atoms[f].Hybridization = Hybridization.SP2;
                mol.Bonds[f].IsAromatic    = true;
            }
            FindAndConfigureAtomTypesForAllAtoms(mol);
            adder.AddImplicitHydrogens(mol);
            Assert.AreEqual(6, AtomContainerManipulator.GetTotalHydrogenCount(mol));
        }
        /// <summary>
        /// </summary>
        /// <param name="set">The collection of IAtomContainer objects</param>
        /// <returns>The summed implicit hydrogens of all atoms in this set.</returns>
        public static int GetTotalHydrogenCount(IEnumerable <IAtomContainer> set)
        {
            int hCount = 0;

            foreach (var item in set)
            {
                hCount += AtomContainerManipulator.GetTotalHydrogenCount(item);
            }
            return(hCount);
        }
        public void TestNaCl()
        {
            var mol = builder.NewAtomContainer();
            var cl  = builder.NewAtom("Cl");

            cl.FormalCharge = -1;
            mol.Atoms.Add(cl);
            var na = builder.NewAtom("Na");

            na.FormalCharge = +1;
            mol.Atoms.Add(na);
            FindAndConfigureAtomTypesForAllAtoms(mol);
            adder.AddImplicitHydrogens(mol);

            Assert.AreEqual(2, mol.Atoms.Count);
            Assert.AreEqual(0, AtomContainerManipulator.GetTotalHydrogenCount(mol));
            Assert.AreEqual(0, mol.GetConnectedBonds(cl).Count());
            Assert.AreEqual(0, cl.ImplicitHydrogenCount.Value);
            Assert.AreEqual(0, mol.GetConnectedBonds(na).Count());
            Assert.AreEqual(0, na.ImplicitHydrogenCount.Value);
        }
        public void TestAdenine()
        {
            var   mol = builder.NewAtomContainer(); // Adenine
            IAtom a1  = mol.Builder.NewAtom("C");

            a1.Point2D = new Vector2(21.0223, -17.2946);
            mol.Atoms.Add(a1);
            IAtom a2 = mol.Builder.NewAtom("C");

            a2.Point2D = new Vector2(21.0223, -18.8093);
            mol.Atoms.Add(a2);
            IAtom a3 = mol.Builder.NewAtom("C");

            a3.Point2D = new Vector2(22.1861, -16.6103);
            mol.Atoms.Add(a3);
            IAtom a4 = mol.Builder.NewAtom("N");

            a4.Point2D = new Vector2(19.8294, -16.8677);
            mol.Atoms.Add(a4);
            IAtom a5 = mol.Builder.NewAtom("N");

            a5.Point2D = new Vector2(22.2212, -19.5285);
            mol.Atoms.Add(a5);
            IAtom a6 = mol.Builder.NewAtom("N");

            a6.Point2D = new Vector2(19.8177, -19.2187);
            mol.Atoms.Add(a6);
            IAtom a7 = mol.Builder.NewAtom("N");

            a7.Point2D = new Vector2(23.4669, -17.3531);
            mol.Atoms.Add(a7);
            IAtom a8 = mol.Builder.NewAtom("N");

            a8.Point2D = new Vector2(22.1861, -15.2769);
            mol.Atoms.Add(a8);
            IAtom a9 = mol.Builder.NewAtom("C");

            a9.Point2D = new Vector2(18.9871, -18.0139);
            mol.Atoms.Add(a9);
            IAtom a10 = mol.Builder.NewAtom("C");

            a10.Point2D = new Vector2(23.4609, -18.8267);
            mol.Atoms.Add(a10);
            IBond b1 = mol.Builder.NewBond(a1, a2, BondOrder.Double);

            mol.Bonds.Add(b1);
            IBond b2 = mol.Builder.NewBond(a1, a3, BondOrder.Single);

            mol.Bonds.Add(b2);
            IBond b3 = mol.Builder.NewBond(a1, a4, BondOrder.Single);

            mol.Bonds.Add(b3);
            IBond b4 = mol.Builder.NewBond(a2, a5, BondOrder.Single);

            mol.Bonds.Add(b4);
            IBond b5 = mol.Builder.NewBond(a2, a6, BondOrder.Single);

            mol.Bonds.Add(b5);
            IBond b6 = mol.Builder.NewBond(a3, a7, BondOrder.Double);

            mol.Bonds.Add(b6);
            IBond b7 = mol.Builder.NewBond(a3, a8, BondOrder.Single);

            mol.Bonds.Add(b7);
            IBond b8 = mol.Builder.NewBond(a4, a9, BondOrder.Double);

            mol.Bonds.Add(b8);
            IBond b9 = mol.Builder.NewBond(a5, a10, BondOrder.Double);

            mol.Bonds.Add(b9);
            IBond b10 = mol.Builder.NewBond(a6, a9, BondOrder.Single);

            mol.Bonds.Add(b10);
            IBond b11 = mol.Builder.NewBond(a7, a10, BondOrder.Single);

            mol.Bonds.Add(b11);

            FindAndConfigureAtomTypesForAllAtoms(mol);
            adder.AddImplicitHydrogens(mol);
            Assert.AreEqual(5, AtomContainerManipulator.GetTotalHydrogenCount(mol));
        }