public void DivideTest() { for (var i = -70; i < 70; i += 3) { for (var j = -70; j < 70; j += 3) { if (j == 0) { continue; } const string op = "/"; var target = i / j; var s = string.Format("{1}{0}{2}", op, i, j); Assert.AreEqual(target, (int)MathString.Parse(s, null), s); s = string.Format("{1} {0}{2}", op, i, j); Assert.AreEqual(target, (int)MathString.Parse(s, null), s); s = string.Format("{1}{0} {2}", op, i, j); Assert.AreEqual(target, (int)MathString.Parse(s, null), s); s = string.Format("{1} {0} {2}", op, i, j); Assert.AreEqual(target, (int)MathString.Parse(s, null), s); } } }
static void Main(string[] args) { MethodPointer methodPointer = AddInt; Console.WriteLine(methodPointer(2, 3)); Console.WriteLine(CompareValue(2, 3, CompareAsc)); //Anonymous Method MethodPointer Point = delegate(int a, int b) { return(a + b); }; Console.WriteLine(CompareValue(2, 3, delegate(int a, int b) { return(a > b); })); //Lambda Expression MathZarb2 zarb2 = (a) => { return(a * 2); }; MathZarb2 zarb2_2 = a => a * 2; Console.WriteLine("Lambda Expression: " + zarb2_2(2)); //Generic MathString <string, int, int> mathString = (p1, p2) => { return((p1 * p2).ToString()); }; MathString <string, int, int> mathString_2 = delegate(int p1, int p2) { return((p1 * p2).ToString()); }; Console.WriteLine("Generic: " + mathString_2(2, 3)); }
public void Exp3Test() { for (var i = -5; i < 5; i++) { for (var j = 0; j < 5; j++) { for (var k = 0; k < 5; k++) { if (j == 0 || k == 0) { continue; } const string op = "^"; var target = Math.Pow(Math.Pow(i, j), k); var s = string.Format("{1}{0}{2}{0}{3}", op, i, j, k); Assert.AreEqual(target, MathString.Parse(s, null), s); s = string.Format("{1} {0}{2}{0} {3}", op, i, j, k); Assert.AreEqual(target, MathString.Parse(s, null), s); s = string.Format("{1}{0} {2} {0} {3}", op, i, j, k); Assert.AreEqual(target, MathString.Parse(s, null), s); s = string.Format("{1} {0} {2} {0} {3}", op, i, j, k); Assert.AreEqual(target, MathString.Parse(s, null), s); } } } }
public void Divide3Test() { for (var i = -7; i < 7; i++) { for (var j = -7; j < 7; j++) { for (var k = -7; k < 7; k++) { if (j == 0 || k == 0) { continue; } const string op = "/"; var target = i / j / k; var s = string.Format("{1}{0}{2}{0}{3}", op, i, j, k); Assert.AreEqual(target, (int)MathString.Parse(s, null), s); s = string.Format("{1} {0}{2}{0} {3}", op, i, j, k); Assert.AreEqual(target, (int)MathString.Parse(s, null), s); s = string.Format("{1}{0} {2} {0} {3}", op, i, j, k); Assert.AreEqual(target, (int)MathString.Parse(s, null), s); s = string.Format("{1} {0} {2} {0} {3}", op, i, j, k); Assert.AreEqual(target, (int)MathString.Parse(s, null), s); } } } }
public void MathString_type_is_formatted() { var latex = new MathString(@"F(k) = \int_{-\infty}^{\infty} f(x) e^{2\pi i k} dx"); var mimeType = Formatter.PreferredMimeTypeFor(latex.GetType()); var formattedValue = new FormattedValue( mimeType, latex.ToDisplayString(mimeType)); formattedValue.MimeType.Should().Be("text/latex"); formattedValue.Value.Should().Be(@"$$F(k) = \int_{-\infty}^{\infty} f(x) e^{2\pi i k} dx$$"); }
public void Can_generate_LaTeX_string_from_LaTeX_object() { Formatter <MathString> .Register((math, writer) => { writer.Write(math.ToString()); }, "text/latex"); var mathSource = @"F(k) = \int_{-\infty}^{\infty} f(x) e^{2\pi i k} dx"; var math = new MathString(mathSource); var writer = new StringWriter(); math.FormatTo(writer, "text/latex"); var s = writer.ToString(); s.Should().Be($"$${mathSource}$$"); }
static void DelegatesMath() { OverMath math = new OverMath(); MathInt mathInt = math.Plus; Console.WriteLine(n1 + " + " + n2 + " = " + mathInt(n1, n2)); mathInt = math.Minus; Console.WriteLine(n1 + " - " + n2 + " = " + mathInt(n1, n2)); mathInt = math.Gange; Console.WriteLine(n1 + " * " + n2 + " = " + mathInt(n1, n2)); mathInt = math.Dividere; Console.WriteLine(n1 + " / " + n2 + " = " + mathInt(n1, n2)); mathInt = math.Potens; Console.WriteLine(n1 + "^" + n2 + " = " + mathInt(n1, n2)); MathFloat mathFloat = math.Plus; Console.WriteLine(n3 + " + " + n4 + " = " + mathFloat(n3, n4)); mathFloat = math.Minus; Console.WriteLine(n3 + " - " + n4 + " = " + mathFloat(n3, n4)); mathFloat = math.Gange; Console.WriteLine(n3 + " * " + n4 + " = " + mathFloat(n3, n4)); mathFloat = math.Dividere; Console.WriteLine(n3 + " / " + n4 + " = " + mathFloat(n3, n4)); mathFloat = math.Potens; Console.WriteLine(n3 + "^" + n4 + " = " + mathFloat(n3, n4)); MathString mathString = math.Plus; Console.WriteLine(n5 + " + " + n6 + " = " + mathString(n5, n6)); mathString = math.Minus; Console.WriteLine(n5 + " - " + n6 + " = " + mathString(n5, n6)); mathString = math.Gange; Console.WriteLine(n5 + " * " + n6 + " = " + mathString(n5, n6)); mathString = math.Dividere; Console.WriteLine(n5 + " / " + n6 + " = " + mathString(n5, n6)); mathString = math.Potens; Console.WriteLine(n5 + "^" + n6 + " = " + mathString(n5, n6)); Math1Int math1Int = math.Kvadratrod; Math1Float math1Float = math.Kvadratrod; Math1String math1String = math.Kvadratrod; Console.WriteLine("Kvadratroden af 64 = " + math1Int((int)64)); Console.WriteLine("Kvadratroden af 9 = " + math1Float((float)9)); Console.WriteLine("Kvadratroden af 625 = " + math1String("625")); }
public void AddTest() { for (var i = -100; i < 100; i += 9) { for (var j = -100; j < 100; j += 9) { const string op = "+"; var target = i + j; var s = string.Format("{1}{0}{2}", op, i, j); Assert.AreEqual(target, MathString.Parse(s, null), s); s = string.Format("{1} {0}{2}", op, i, j); Assert.AreEqual(target, MathString.Parse(s, null), s); s = string.Format("{1}{0} {2}", op, i, j); Assert.AreEqual(target, MathString.Parse(s, null), s); s = string.Format("{1} {0} {2}", op, i, j); Assert.AreEqual(target, MathString.Parse(s, null), s); } } }
public void SubtractTest() { for (var i = -70; i < 70; i += 3) { for (var j = -70; j < 70; j += 3) { const string op = "-"; var target = i - j; var s = string.Format("{1}{0}{2}", op, i, j); Assert.AreEqual(target, MathString.Parse(s, null), s); s = string.Format("{1} {0}{2}", op, i, j); Assert.AreEqual(target, MathString.Parse(s, null), s); s = string.Format("{1}{0} {2}", op, i, j); Assert.AreEqual(target, MathString.Parse(s, null), s); s = string.Format("{1} {0} {2}", op, i, j); Assert.AreEqual(target, MathString.Parse(s, null), s); } } }
public void ExpTest() { for (var i = -20; i < 20; i++) { for (var j = 0; j < 10; j++) { const string op = "^"; var target = Math.Pow(i, j); var s = string.Format("{1}{0}{2}", op, i, j); Assert.AreEqual(target, MathString.Parse(s, null), s); s = string.Format("{1} {0}{2}", op, i, j); Assert.AreEqual(target, MathString.Parse(s, null), s); s = string.Format("{1}{0} {2}", op, i, j); Assert.AreEqual(target, MathString.Parse(s, null), s); s = string.Format("{1} {0} {2}", op, i, j); Assert.AreEqual(target, MathString.Parse(s, null), s); } } }
public void Subtract3Test() { for (var i = -7; i < 7; i++) { for (var j = -7; j < 7; j++) { for (var k = -7; k < 7; k++) { const string op = "-"; var target = i - j - k; var s = string.Format("{1}{0}{2}{0}{3}", op, i, j, k); Assert.AreEqual(target, MathString.Parse(s, null), s); s = string.Format("{1} {0}{2}{0} {3}", op, i, j, k); Assert.AreEqual(target, MathString.Parse(s, null), s); s = string.Format("{1}{0} {2} {0} {3}", op, i, j, k); Assert.AreEqual(target, MathString.Parse(s, null), s); s = string.Format("{1} {0} {2} {0} {3}", op, i, j, k); Assert.AreEqual(target, MathString.Parse(s, null), s); } } } }
public void Multiply3Test() { for (var i = -10; i < 10; i++) { for (var j = -10; j < 10; j++) { for (var k = -10; k < 10; k++) { const string op = "*"; var target = i * j * k; var s = string.Format("{1}{0}{2}{0}{3}", op, i, j, k); Assert.AreEqual(target, MathString.Parse(s, null), s); s = string.Format("{1} {0}{2}{0} {3}", op, i, j, k); Assert.AreEqual(target, MathString.Parse(s, null), s); s = string.Format("{1}{0} {2} {0} {3}", op, i, j, k); Assert.AreEqual(target, MathString.Parse(s, null), s); s = string.Format("{1} {0} {2} {0} {3}", op, i, j, k); Assert.AreEqual(target, MathString.Parse(s, null), s); } } } }
public void testClean() { mathStringClass = null; }
public void testInit() { mathStringClass = new MathString(); }
public static IType Operate(this Operator op, IType left, IType right) { if (left is IPopup) { if (!(left is Types.Void && (op == Operator.EQUALS || op == Operator.NOT_EQUALS))) { return(left); } } if (right is IPopup) { if (!(right is Types.Void && (op == Operator.EQUALS || op == Operator.NOT_EQUALS))) { return(right); } } Number n1 = left as Number; Number n2 = right as Number; Types.Vector v1 = left as Types.Vector; Types.Vector v2 = right as Types.Vector; MathString s1 = left as MathString; MathString s2 = right as MathString; MathBool b1 = left as MathBool; MathBool b2 = right as MathBool; switch (op) { case Operator.ADD: if (n1 != null && n2 != null) { return(new Number(n1.value + n2.value)); } if (v1 != null && v2 != null) { return(new Types.Vector(v1.items.Combine(v2.items, (x, y) => Operator.ADD.Operate(x, y)))); } else if (s1 != null && s2 != null) { return(new MathString(s1.value + s2.value)); } else if (b1 != null && b2 != null) { return(b1.value || b2.value ? MathBool.TRUE : MathBool.FALSE); } return(new Error("WrongType", $"The + operator cannot be applied to types {left.TypeName} and {right.TypeName}")); case Operator.SUBTRACT: if (n1 != null && n2 != null) { return(new Number(n1.value - n2.value)); } return(new Error("WrongType", $"The - operator cannot be applied to types {left.TypeName} and {right.TypeName}")); case Operator.MULTIPLY: if (n1 != null && n2 != null) { return(new Number(n1.value * n2.value)); } else if (v1 != null && v2 != null) { return(v1.items.Combine(v2.items, (x, y) => Operator.MULTIPLY.Operate(x, y)).Aggregate((x, y) => Operator.ADD.Operate(x, y))); } else if ((v1 ?? v2) != null && (n1 ?? n2) != null) { return(new Types.Vector((v1 ?? v2).items.Select((x, y) => Operator.MULTIPLY.Operate(x, n1 ?? n2)).ToArray())); } else if (b1 != null && b2 != null) { return(b1.value && b2.value ? MathBool.TRUE : MathBool.FALSE); } return(new Error("WrongType", $"The * operator cannot be applied to types {left.TypeName} and {right.TypeName}")); case Operator.DIVIDE: if (n1 != null && n2 != null) { return(new Number(n1.value / n2.value)); } else if ((v1 ?? v2) != null && (n1 ?? n2) != null) { return(new Types.Vector((v1 ?? v2).items.Select((x, y) => Operator.DIVIDE.Operate(x, n1 ?? n2)).ToArray())); } return(new Error("WrongType", $"The / operator cannot be applied to types {left.TypeName} and {right.TypeName}")); case Operator.MODULO: if (n1 != null && n2 != null) { double mod(double a, double n) => n == 0 ? 0 : ((a % n) + n) % n; return(new Number(new Complex(mod(n1.value.Real, n2.value.Real), mod(n1.value.Imaginary, n2.value.Imaginary)))); } return(new Error("WrongType", $"The / operator cannot be applied to types {left.TypeName} and {right.TypeName}")); case Operator.EXPONENT: if (n1 != null && n2 != null) { if (n1.IsReal && n2.IsReal) { return(new Number(Math.Pow(n1.value.Real, n2.value.Real))); } else if (n1.value.Real == 0 && !n1.IsReal && n2.IsReal && n2.value.Real % 1 == 0) { Complex c; switch (((n2.value.Real % 4) + 4) % 4) { case 1: c = new Complex(0, 1); break; case 2: c = new Complex(-1, 0); break; case 3: c = new Complex(0, -1); break; case 0: c = new Complex(1, 0); break; } return(new Number(c * Math.Pow(n1.value.Imaginary, n2.value.Real))); } return(new Number(Complex.Pow(n1.value, n2.value))); } return(new Error("WrongType", $"The / operator cannot be applied to types {left.TypeName} and {right.TypeName}")); case Operator.EQUALS: return(left.Equals(right) ? MathBool.TRUE : MathBool.FALSE); case Operator.NOT_EQUALS: return(left.Equals(right) ? MathBool.FALSE : MathBool.TRUE); case Operator.GREATER: if (n1 != null && n2 != null) { if (n1.value.Real != n2.value.Real) { return((n1.value.Real > n2.value.Real) ? MathBool.TRUE : MathBool.FALSE); } else { return((n1.value.Imaginary > n2.value.Imaginary) ? MathBool.TRUE : MathBool.FALSE); } } return(new Error("WrongType", $"The > comparison operator cannot be applied to types {left.TypeName} and {right.TypeName}")); case Operator.LESS: if (n1 != null && n2 != null) { if (n1.value.Real != n2.value.Real) { return((n1.value.Real < n2.value.Real) ? MathBool.TRUE : MathBool.FALSE); } else { return((n1.value.Imaginary < n2.value.Imaginary) ? MathBool.TRUE : MathBool.FALSE); } } return(new Error("WrongType", $"The < comparison operator cannot be applied to types {left.TypeName} and {right.TypeName}")); case Operator.GR_EQUAL: if (n1 != null && n2 != null) { if (n1.value.Real != n2.value.Real) { return((n1.value.Real >= n2.value.Real) ? MathBool.TRUE : MathBool.FALSE); } else { return((n1.value.Imaginary >= n2.value.Imaginary) ? MathBool.TRUE : MathBool.FALSE); } } return(new Error("WrongType", $"The >= comparison operator cannot be applied to types {left.TypeName} and {right.TypeName}")); case Operator.LE_EQUAL: if (n1 != null && n2 != null) { if (n1.value.Real != n2.value.Real) { return((n1.value.Real <= n2.value.Real) ? MathBool.TRUE : MathBool.FALSE); } else { return((n1.value.Imaginary <= n2.value.Imaginary) ? MathBool.TRUE : MathBool.FALSE); } } return(new Error("WrongType", $"The <= comparison operator cannot be applied to types {left.TypeName} and {right.TypeName}")); } return(new Error("UnexpectedError", "An unexpected error occured with an operator.")); }