public void Stoichiometry_CreateConversionTable2() { ChemicalEquation.PTable = new PeriodicTable("..\\..\\..\\Chemistry-Solver\\data\\ElementData.csv"); var stoichiometry = new Stoichiometry(); var equation = new ChemicalEquation("1Al_(1) + 1Cl_(2) --> 1Al_(1)Cl_(3)"); equation.Balance(); var canceledUnit = $"{equation.Reactants[0].Item2}{equation.Reactants[0].Item1.ToString()} mass"; var remainingUnit = $"{equation.Products[0].Item2}{equation.Products[0].Item1.ToString()} moles"; stoichiometry.CreateConversionTable(equation); stoichiometry.UnitConverter.InputValue = new ConversionValue(1d, new[] { canceledUnit }, null, equation.ToString()); stoichiometry.UnitConverter.ConversionRatio = stoichiometry.UnitConverter.ConversionTable.GetConversionValue(canceledUnit, remainingUnit); var actual = stoichiometry.UnitConverter.PerformConversion(); canceledUnit = $"{equation.Reactants[1].Item2}{equation.Reactants[1].Item1.ToString()} mass"; stoichiometry.UnitConverter.InputValue = new ConversionValue(1d, new[] { canceledUnit }, null, equation.ToString()); stoichiometry.UnitConverter.ConversionRatio = stoichiometry.UnitConverter.ConversionTable.GetConversionValue(canceledUnit, remainingUnit); var actual2 = stoichiometry.UnitConverter.PerformConversion(); }
/// <summary> /// Enters the user-specified equation into the application. /// </summary> /// <param name="sender">The button that sent the event.</param> /// <param name="e">The event's arguments.</param> public void EquationEnterButtonClick(object sender, EventArgs e) { model_.Equation = new ChemicalEquation(tbox_equation_input.Text); model_.Equation.Balance(); if (model_.Equation.IsBalanced()) { tbox_equation_input.Text = model_.Equation.ToString(); var reactants = model_.Equation.Reactants.Select(reactant => $"{reactant.Item2}{reactant.Item1}").ToArray(); var products = model_.Equation.Products.Select(product => $"{product.Item2}{product.Item1}").ToArray(); cbox_input_molecule.Items.Clear(); cbox_output_molecule.Items.Clear(); cbox_input_molecule.Items.AddRange(reactants); cbox_input_molecule.Items.AddRange(products); cbox_input_molecule.SelectedIndex = 0; cbox_output_molecule.Items.AddRange(reactants); cbox_output_molecule.Items.AddRange(products); cbox_output_molecule.SelectedIndex = reactants.Length; stoichiometry_.CreateConversionTable(model_.Equation); // Focusing causes the text change in the input amount tbox to force a conversion. tbox_input_amount.Focus(); tbox_input_amount.Text = 1.ToString(); } }
public void Stoichiometry_CreateConversionTable() { ChemicalEquation.PTable = new PeriodicTable("..\\..\\..\\Chemistry-Solver\\data\\ElementData.csv"); var stoichiometry = new Stoichiometry(); var equation = new ChemicalEquation("1H_(2) + 1O_(2) --> 1H_(2)O_(1)"); equation.Balance(); var canceledUnit = $"{equation.Reactants[0].Item2}{equation.Reactants[0].Item1.ToString()} moles"; var remainingUnit = $"{equation.Reactants[1].Item2}{equation.Reactants[1].Item1.ToString()} moles"; stoichiometry.CreateConversionTable(equation); stoichiometry.UnitConverter.InputValue = new ConversionValue(14d, new[] { canceledUnit }, null, equation.ToString()); stoichiometry.UnitConverter.ConversionRatio = stoichiometry.UnitConverter.ConversionTable.GetConversionValue(canceledUnit, remainingUnit); var actual = stoichiometry.UnitConverter.PerformConversion(); var expected = new ConversionValue(7d, new[] { remainingUnit }, null, equation.ToString()); Assert.AreEqual(expected, actual); }