diff --git a/VAR.ExpressionEvaluator.Tests/ExpressionBinaryNodeTests.cs b/VAR.ExpressionEvaluator.Tests/ExpressionBinaryNodeTests.cs
new file mode 100644
index 0000000..b6f259e
--- /dev/null
+++ b/VAR.ExpressionEvaluator.Tests/ExpressionBinaryNodeTests.cs
@@ -0,0 +1,64 @@
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+
+namespace VAR.ExpressionEvaluator.Tests
+{
+ [TestClass()]
+ public class ExpressionBinaryNodeTests
+ {
+ [TestMethod()]
+ public void ExpressionBinaryNode__Plus()
+ {
+ var expr = new ExpressionBinaryNode(
+ leftNode: new ExpressionNumberNode(10),
+ rightNode: new ExpressionNumberNode(20),
+ operation: (a, b) => (decimal)a + (decimal)b
+ );
+
+ var result = expr.Eval();
+
+ Assert.AreEqual(30m, result);
+ }
+
+ [TestMethod()]
+ public void ExpressionBinaryNode__Minus()
+ {
+ var expr = new ExpressionBinaryNode(
+ leftNode: new ExpressionNumberNode(10),
+ rightNode: new ExpressionNumberNode(20),
+ operation: (a, b) => (decimal)a - (decimal)b
+ );
+
+ var result = expr.Eval();
+
+ Assert.AreEqual(-10m, result);
+ }
+
+ [TestMethod()]
+ public void ExpressionBinaryNode__Multiply()
+ {
+ var expr = new ExpressionBinaryNode(
+ leftNode: new ExpressionNumberNode(10),
+ rightNode: new ExpressionNumberNode(20),
+ operation: (a, b) => (decimal)a * (decimal)b
+ );
+
+ var result = expr.Eval();
+
+ Assert.AreEqual(200m, result);
+ }
+
+ [TestMethod()]
+ public void ExpressionBinaryNode__Division()
+ {
+ var expr = new ExpressionBinaryNode(
+ leftNode: new ExpressionNumberNode(10),
+ rightNode: new ExpressionNumberNode(5),
+ operation: (a, b) => (decimal)a / (decimal)b
+ );
+
+ var result = expr.Eval();
+
+ Assert.AreEqual(2m, result);
+ }
+ }
+}
\ No newline at end of file
diff --git a/VAR.ExpressionEvaluator.Tests/ExpressionNumberNodeTests.cs b/VAR.ExpressionEvaluator.Tests/ExpressionNumberNodeTests.cs
new file mode 100644
index 0000000..930a740
--- /dev/null
+++ b/VAR.ExpressionEvaluator.Tests/ExpressionNumberNodeTests.cs
@@ -0,0 +1,29 @@
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+
+namespace VAR.ExpressionEvaluator.Tests
+{
+ [TestClass()]
+ public class ExpressionNumberNodeTests
+ {
+ [TestMethod()]
+ public void ExpressionNumberNode__One()
+ {
+ IExpressionNode node = new ExpressionNumberNode(1);
+ Assert.AreEqual(1m, node.Eval());
+ }
+
+ [TestMethod()]
+ public void ExpressionNumberNode__Two()
+ {
+ IExpressionNode node = new ExpressionNumberNode(2);
+ Assert.AreEqual(2m, node.Eval());
+ }
+
+ [TestMethod()]
+ public void ExpressionNumberNode__OneHundredDotFortyFive()
+ {
+ IExpressionNode node = new ExpressionNumberNode(100.45m);
+ Assert.AreEqual(100.45m, node.Eval());
+ }
+ }
+}
\ No newline at end of file
diff --git a/VAR.ExpressionEvaluator.Tests/ExpressionStringNodeTests.cs b/VAR.ExpressionEvaluator.Tests/ExpressionStringNodeTests.cs
new file mode 100644
index 0000000..fc2c5e2
--- /dev/null
+++ b/VAR.ExpressionEvaluator.Tests/ExpressionStringNodeTests.cs
@@ -0,0 +1,30 @@
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+
+namespace VAR.ExpressionEvaluator.Tests
+{
+ [TestClass()]
+ public class ExpressionStringNodeTests
+ {
+ [TestMethod()]
+ public void ExpressionNumberNode__Hello()
+ {
+ IExpressionNode node = new ExpressionStringNode("Hello");
+ Assert.AreEqual("Hello", node.Eval());
+ }
+
+ [TestMethod()]
+ public void ExpressionNumberNode__World()
+ {
+ IExpressionNode node = new ExpressionStringNode("World");
+ Assert.AreEqual("World", node.Eval());
+ }
+
+ [TestMethod()]
+ public void ExpressionNumberNode__Hello_World()
+ {
+ IExpressionNode node = new ExpressionStringNode("Hello World");
+ Assert.AreEqual("Hello World", node.Eval());
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/VAR.ExpressionEvaluator.Tests/VAR.ExpressionEvaluator.Tests.csproj b/VAR.ExpressionEvaluator.Tests/VAR.ExpressionEvaluator.Tests.csproj
index 2954f8f..b0f1dfe 100644
--- a/VAR.ExpressionEvaluator.Tests/VAR.ExpressionEvaluator.Tests.csproj
+++ b/VAR.ExpressionEvaluator.Tests/VAR.ExpressionEvaluator.Tests.csproj
@@ -51,6 +51,9 @@
+
+
+
diff --git a/VAR.ExpressionEvaluator/ExpressionBinaryNode.cs b/VAR.ExpressionEvaluator/ExpressionBinaryNode.cs
new file mode 100644
index 0000000..e6fd432
--- /dev/null
+++ b/VAR.ExpressionEvaluator/ExpressionBinaryNode.cs
@@ -0,0 +1,27 @@
+using System;
+
+namespace VAR.ExpressionEvaluator
+{
+ public class ExpressionBinaryNode : IExpressionNode
+ {
+ private IExpressionNode _leftNode;
+ private IExpressionNode _rightNode;
+ private readonly Func