public virtual void TestSort_Coefficients() { IChemObjectSet <T> set = (IChemObjectSet <T>)NewChemObject(); IChemObjectBuilder builder = set.Builder; T a = NewContainerObject(); T b = NewContainerObject(); a.Atoms.Add(builder.NewAtom("C")); a.Atoms.Add(builder.NewAtom("C")); b.Atoms.Add(builder.NewAtom("C")); set.Add(a, 1); set.Add(b, 2); Assert.AreEqual(a, set[0]); Assert.AreEqual(1D, set.GetMultiplier(0)); Assert.AreEqual(b, set[1]); Assert.AreEqual(2D, set.GetMultiplier(1)); // sort by atom container count var orderedSet = set.OrderBy(n => n, new ComparerByCoefficients()); AssertAreOrderLessEqual( new[] { a, b }.Cast <IChemObject>(), set.Cast <IChemObject>()); Assert.IsTrue(Compares.AreDeepEqual( new[] { 1D, 2D }, new[] { set.GetMultiplier(0), set.GetMultiplier(1) })); }
public virtual void TestSetMultiplier_int_Double() { IChemObjectSet <T> som = (IChemObjectSet <T>)NewChemObject(); som.Add(NewContainerObject()); Assert.AreEqual(1.0, som.GetMultiplier(0).Value, 0.00001); som.SetMultiplier(0, 2.0); Assert.AreEqual(2.0, som.GetMultiplier(0).Value, 0.00001); }
public virtual void TestSetMultiplier_IAtomContainer_Double() { IChemObjectSet <T> som = (IChemObjectSet <T>)NewChemObject(); T container = NewContainerObject(); som.Add(container); Assert.AreEqual(1.0, som.GetMultiplier(container).Value, 0.00001); som.SetMultiplier(container, 2.0); Assert.AreEqual(2.0, som.GetMultiplier(container).Value, 0.00001); }
/// <summary> /// Writes a MoleculeSet to an Stream for the reaction. /// </summary> /// <param name="som">The MoleculeSet that is written to an Stream</param> private void WriteAtomContainerSet(IChemObjectSet <IAtomContainer> som) { for (int i = 0; i < som.Count; i++) { IAtomContainer mol = som[i]; for (int j = 0; j < som.GetMultiplier(i); j++) { StringWriter sw = new StringWriter(); writer.Write("$MOL"); writer.Write('\n'); MDLV2000Writer mdlwriter = null; try { mdlwriter = new MDLV2000Writer(sw); } catch (Exception ex) { Trace.TraceError(ex.Message); Debug.WriteLine(ex); throw new CDKException("Exception while creating MDLWriter: " + ex.Message, ex); } mdlwriter.Write(mol); mdlwriter.Close(); writer.Write(sw.ToString()); } } }
public virtual void TestAddAtomContainer_IAtomContainer_Double() { IChemObjectSet <T> som = (IChemObjectSet <T>)NewChemObject(); som.Add(NewContainerObject(), 2.0); Assert.AreEqual(1, som.Count); Assert.AreEqual(2.0, som.GetMultiplier(0).Value, 0.00001); }
public virtual void TestGetMultiplier_IAtomContainer() { IChemObjectSet <T> som = (IChemObjectSet <T>)NewChemObject(); som.Add(NewContainerObject()); Assert.AreEqual(-1.0, som.GetMultiplier(NewContainerObject()).Value, 0.00001); }
public virtual void TestSetMultipliers_arrayDouble() { IChemObjectSet <T> som = (IChemObjectSet <T>)NewChemObject(); T container = NewContainerObject(); som.Add(container); T container2 = NewContainerObject(); som.Add(container2); Assert.AreEqual(1.0, som.GetMultiplier(0).Value, 0.00001); Assert.AreEqual(1.0, som.GetMultiplier(1).Value, 0.00001); double?[] multipliers = new double?[2]; multipliers[0] = 2.0; multipliers[1] = 3.0; som.SetMultipliers(multipliers); Assert.AreEqual(2.0, som.GetMultiplier(0).Value, 0.00001); Assert.AreEqual(3.0, som.GetMultiplier(1).Value, 0.00001); }
/// <summary> /// </summary> /// <param name="set">The collection of IAtomContainer objects</param> /// <returns>The summed formal charges of all atoms in this set.</returns> public static double GetTotalFormalCharge(IChemObjectSet <IAtomContainer> set) { int charge = 0; for (int i = 0; i < set.Count; i++) { int thisCharge = AtomContainerManipulator.GetTotalFormalCharge(set[i]); double stoich = set.GetMultiplier(i).Value; charge += (int)(stoich * thisCharge); } return(charge); }
public virtual void TestCloneMultiplier() { IChemObjectSet <T> containerSet = (IChemObjectSet <T>)NewChemObject(); containerSet.Add(NewContainerObject(), 2); object clone = containerSet.Clone(); Assert.IsTrue(clone is IChemObjectSet <T>); IChemObjectSet <T> clonedSet = (IChemObjectSet <T>)clone; Assert.AreNotSame(containerSet, clonedSet); Assert.AreEqual(2, containerSet.GetMultiplier(0).Value); Assert.AreEqual(2, clonedSet.GetMultiplier(0).Value); }
public virtual void TestSortAtomContainers_WithMuliplier() { IChemObjectSet <T> som = (IChemObjectSet <T>)NewChemObject(); T ac1 = NewContainerObject(); som.Add(ac1, 2.0); ac1.SetProperty("multiplierSortCode", "2"); T ac2 = NewContainerObject(); som.Add(ac2, 1.0); ac2.SetProperty("multiplierSortCode", "1"); som.Sort(new CodeComparer()); Assert.AreEqual(2, som.Count); T newFirstAC = som[0]; Assert.AreEqual(newFirstAC.GetProperty <object>("multiplierSortCode"), "1"); // OK, sorting worked as intended // The multiplier should have been resorted too: Assert.AreEqual(1.0, som.GetMultiplier(newFirstAC).Value, 0.00001); }