Пример #1
0
        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();
        }
Пример #2
0
        /// <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();
            }
        }
Пример #3
0
        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);
        }