Пример #1
0
 internal T Value <T>()
 {
     try
     {
         Symbolics.Expression   expression = Symbolics.Parse <T>(Expression);
         Symbolics.Constant <T> constant   = expression.Simplify() as Symbolics.Constant <T>;
         return(constant.Value);
     }
     catch (Exception exception)
     {
         throw new Exception("There is a BUG in " + nameof(Towel) + ". A " + nameof(ConversionFactorAttribute) + " expression could not simplify to a constant.", exception);
     }
 }
Пример #2
0
        public void Parse_String_Testing()
        {
            Symbolics.Constant <int> ONE = new Symbolics.Constant <int>(1);

            #region Basic Negate Tests

            {
                var A = Symbolics.Parse <int>("-1", int.TryParse);
                var B = -ONE;
                Assert.IsTrue(A.Equals(B));
                Assert.IsTrue(A.ToString().Equals(B.ToString()));
            }
            {
                var A = Symbolics.Parse <int>("- 1", int.TryParse);
                var B = -ONE;
                Assert.IsTrue(A.Equals(B));
                Assert.IsTrue(A.ToString().Equals(B.ToString()));
            }

            #endregion

            #region Basic Add Tests

            {
                var A = Symbolics.Parse <int>("1+1", int.TryParse);
                var B = ONE + ONE;
                Assert.IsTrue(A.Equals(B));
                Assert.IsTrue(A.ToString().Equals(B.ToString()));
            }
            {
                var A = Symbolics.Parse <int>("1 + 1", int.TryParse);
                var B = ONE + ONE;
                Assert.IsTrue(A.Equals(B));
                Assert.IsTrue(A.ToString().Equals(B.ToString()));
            }
            {
                var A = Symbolics.Parse <int>("1 + (1 + 1)", int.TryParse);
                var B = ONE + (ONE + ONE);
                Assert.IsTrue(A.Equals(B));
                Assert.IsTrue(A.ToString().Equals(B.ToString()));
            }
            {
                var A = Symbolics.Parse <int>("1 + (1 + (1 + 1))", int.TryParse);
                var B = ONE + (ONE + (ONE + ONE));
                Assert.IsTrue(A.Equals(B));
                Assert.IsTrue(A.ToString().Equals(B.ToString()));
            }

            #endregion

            #region Basic Subtract Tests

            {
                var A = Symbolics.Parse <int>("1-1", int.TryParse);
                var B = ONE - ONE;
                Assert.IsTrue(A.Equals(B));
                Assert.IsTrue(A.ToString().Equals(B.ToString()));
            }
            {
                var A = Symbolics.Parse <int>("1 - 1", int.TryParse);
                var B = ONE - ONE;
                Assert.IsTrue(A.Equals(B));
                Assert.IsTrue(A.ToString().Equals(B.ToString()));
            }
            {
                var A = Symbolics.Parse <int>("1 - (1 - 1)", int.TryParse);
                var B = ONE - (ONE - ONE);
                Assert.IsTrue(A.Equals(B));
                Assert.IsTrue(A.ToString().Equals(B.ToString()));
            }
            {
                var A = Symbolics.Parse <int>("1 - (1 - (1 - 1))", int.TryParse);
                var B = ONE - (ONE - (ONE - ONE));
                Assert.IsTrue(A.Equals(B));
                Assert.IsTrue(A.ToString().Equals(B.ToString()));
            }

            #endregion

            #region Basic Multiply Tests

            {
                var A = Symbolics.Parse <int>("1*1", int.TryParse);
                var B = ONE * ONE;
                Assert.IsTrue(A.Equals(B));
                Assert.IsTrue(A.ToString().Equals(B.ToString()));
            }
            {
                var A = Symbolics.Parse <int>("1 * 1", int.TryParse);
                var B = ONE * ONE;
                Assert.IsTrue(A.Equals(B));
            }
            {
                var A = Symbolics.Parse <int>("1 * (1 * 1)", int.TryParse);
                var B = ONE * (ONE * ONE);
                Assert.IsTrue(A.Equals(B));
                Assert.IsTrue(A.ToString().Equals(B.ToString()));
            }
            {
                var A = Symbolics.Parse <int>("1 * (1 * (1 * 1))", int.TryParse);
                var B = ONE * (ONE * (ONE * ONE));
                Assert.IsTrue(A.Equals(B));
                Assert.IsTrue(A.ToString().Equals(B.ToString()));
            }

            #endregion

            #region Basic Divide Tests

            {
                var A = Symbolics.Parse <int>("1/1", int.TryParse);
                var B = ONE / ONE;
                Assert.IsTrue(A.Equals(B));
                Assert.IsTrue(A.ToString().Equals(B.ToString()));
            }
            {
                var A = Symbolics.Parse <int>("1 / 1", int.TryParse);
                var B = ONE / ONE;
                Assert.IsTrue(A.Equals(B));
            }
            {
                var A = Symbolics.Parse <int>("1 / (1 / 1)", int.TryParse);
                var B = ONE / (ONE / ONE);
                Assert.IsTrue(A.Equals(B));
                Assert.IsTrue(A.ToString().Equals(B.ToString()));
            }
            {
                var A = Symbolics.Parse <int>("1 / (1 / (1 / 1))", int.TryParse);
                var B = ONE / (ONE / (ONE / ONE));
                Assert.IsTrue(A.Equals(B));
                Assert.IsTrue(A.ToString().Equals(B.ToString()));
            }

            #endregion

            #region Basic Factorial Tests

            {
                var A = Symbolics.Parse <int>("1!", int.TryParse);
                var B = new Symbolics.Factorial(ONE);
                Assert.IsTrue(A.Equals(B));
                Assert.IsTrue(A.ToString().Equals(B.ToString()));
            }
            {
                var A = Symbolics.Parse <int>("1 !", int.TryParse);
                var B = new Symbolics.Factorial(ONE);
                Assert.IsTrue(A.Equals(B));
                Assert.IsTrue(A.ToString().Equals(B.ToString()));
            }

            #endregion

            #region Order Of Operations (2 operands)

            {
                var A = Symbolics.Parse <int>("1 + -1", int.TryParse);
                var B = ONE + -ONE;
                Assert.IsTrue(A.Equals(B));
                Assert.IsTrue(A.ToString().Equals(B.ToString()));
            }
            {
                var A = Symbolics.Parse <int>("-1 + 1", int.TryParse);
                var B = -ONE + ONE;
                Assert.IsTrue(A.Equals(B));
                Assert.IsTrue(A.ToString().Equals(B.ToString()));
            }
            {
                var A = Symbolics.Parse <int>("1 + 1 - 1", int.TryParse);
                var B = ONE + ONE - ONE;
                Assert.IsTrue(A.Equals(B));
                Assert.IsTrue(A.ToString().Equals(B.ToString()));
            }
            {
                var A = Symbolics.Parse <int>("1 - 1 + 1", int.TryParse);
                var B = ONE - ONE + ONE;
                Assert.IsTrue(A.Equals(B));
                Assert.IsTrue(A.ToString().Equals(B.ToString()));
            }
            {
                var A = Symbolics.Parse <int>("1 + 1 * 1", int.TryParse);
                var B = ONE + ONE * ONE;
                Assert.IsTrue(A.Equals(B));
                Assert.IsTrue(A.ToString().Equals(B.ToString()));
            }
            {
                var A = Symbolics.Parse <int>("1 * 1 + 1", int.TryParse);
                var B = ONE * ONE + ONE;
                Assert.IsTrue(A.Equals(B));
                Assert.IsTrue(A.ToString().Equals(B.ToString()));
            }
            {
                var A = Symbolics.Parse <int>("1 - 1 * 1", int.TryParse);
                var B = ONE - ONE * ONE;
                Assert.IsTrue(A.Equals(B));
                Assert.IsTrue(A.ToString().Equals(B.ToString()));
            }
            {
                var A = Symbolics.Parse <int>("1 * 1 - 1", int.TryParse);
                var B = ONE * ONE - ONE;
                Assert.IsTrue(A.Equals(B));
                Assert.IsTrue(A.ToString().Equals(B.ToString()));
            }
            {
                var A = Symbolics.Parse <int>("1 * 1 / 1", int.TryParse);
                var B = ONE * ONE / ONE;
                Assert.IsTrue(A.Equals(B));
                Assert.IsTrue(A.ToString().Equals(B.ToString()));
            }
            {
                var A = Symbolics.Parse <int>("1 / 1 * 1", int.TryParse);
                var B = ONE / ONE * ONE;
                Assert.IsTrue(A.Equals(B));
                Assert.IsTrue(A.ToString().Equals(B.ToString()));
            }
            {
                var A = Symbolics.Parse <int>("1 + 1!", int.TryParse);
                var B = ONE + new Symbolics.Factorial(ONE);
                Assert.IsTrue(A.Equals(B));
                Assert.IsTrue(A.ToString().Equals(B.ToString()));
            }
            {
                var A = Symbolics.Parse <int>("1! + 1", int.TryParse);
                var B = new Symbolics.Factorial(ONE) + ONE;
                Assert.IsTrue(A.Equals(B));
                Assert.IsTrue(A.ToString().Equals(B.ToString()));
            }
            {
                var A = Symbolics.Parse <int>("1 - 1!", int.TryParse);
                var B = ONE - new Symbolics.Factorial(ONE);
                Assert.IsTrue(A.Equals(B));
                Assert.IsTrue(A.ToString().Equals(B.ToString()));
            }
            {
                var A = Symbolics.Parse <int>("1! - 1", int.TryParse);
                var B = new Symbolics.Factorial(ONE) - ONE;
                Assert.IsTrue(A.Equals(B));
                Assert.IsTrue(A.ToString().Equals(B.ToString()));
            }
            {
                var A = Symbolics.Parse <int>("1 * 1!", int.TryParse);
                var B = ONE * new Symbolics.Factorial(ONE);
                Assert.IsTrue(A.Equals(B));
                Assert.IsTrue(A.ToString().Equals(B.ToString()));
            }
            {
                var A = Symbolics.Parse <int>("1! * 1", int.TryParse);
                var B = new Symbolics.Factorial(ONE) * ONE;
                Assert.IsTrue(A.Equals(B));
                Assert.IsTrue(A.ToString().Equals(B.ToString()));
            }
            {
                var A = Symbolics.Parse <int>("1 / 1!", int.TryParse);
                var B = ONE / new Symbolics.Factorial(ONE);
                Assert.IsTrue(A.Equals(B));
                Assert.IsTrue(A.ToString().Equals(B.ToString()));
            }
            {
                var A = Symbolics.Parse <int>("1! / 1", int.TryParse);
                var B = new Symbolics.Factorial(ONE) / ONE;
                Assert.IsTrue(A.Equals(B));
                Assert.IsTrue(A.ToString().Equals(B.ToString()));
            }

            #endregion

            //Assert.Inconclusive("Test Method Not Fully Implemented");
        }
Пример #3
0
 internal T Value <T>()
 {
     Symbolics.Expression   expression = Symbolics.Parse <T>(Expression);
     Symbolics.Constant <T> constant   = expression.Simplify() as Symbolics.Constant <T>;
     return(constant.Value);
 }