Skip to content

Commit

Permalink
#464 - Add string concatenation support (#465)
Browse files Browse the repository at this point in the history
  • Loading branch information
sys27 committed Oct 17, 2021
1 parent a7e5b7b commit d99a754
Show file tree
Hide file tree
Showing 18 changed files with 79 additions and 17 deletions.
4 changes: 4 additions & 0 deletions xFunc.Maths/Analyzers/TypeAnalyzers/TypeAnalyzer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -358,6 +358,10 @@ public virtual ResultTypes Analyze(Add exp)
(ResultTypes.Vector, ResultTypes.Vector) => ResultTypes.Vector,
(ResultTypes.Matrix, ResultTypes.Matrix) => ResultTypes.Matrix,

(ResultTypes.String, _) or
(_, ResultTypes.String)
=> ResultTypes.String,

(_, ResultTypes.Number) => ResultTypes.Number.ThrowForLeft(leftResult),
(ResultTypes.Number, _) => ResultTypes.Number.ThrowForRight(rightResult),

Expand Down
3 changes: 3 additions & 0 deletions xFunc.Maths/Expressions/Add.cs
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,9 @@ public override object Execute(ExpressionParameters? parameters)
(Vector left, Vector right) => left.Add(right, parameters),
(Matrix left, Matrix right) => left.Add(right, parameters),

(string left, var right) => left + right,
(var left, string right) => left + right,

_ => throw new ResultIsNotSupportedException(this, leftResult, rightResult),
};
}
Expand Down
34 changes: 33 additions & 1 deletion xFunc.Tests/Analyzers/TypeAnalyzerTests/AddTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
using xFunc.Maths.Expressions.ComplexNumbers;
using xFunc.Maths.Expressions.LogicalAndBitwise;
using xFunc.Maths.Expressions.Matrices;
using xFunc.Maths.Expressions.Units;
using xFunc.Maths.Expressions.Units.AngleUnits;
using xFunc.Maths.Expressions.Units.PowerUnits;
using Xunit;
Expand Down Expand Up @@ -346,5 +345,38 @@ public void TestAddPowerPower()

Test(exp, ResultTypes.PowerNumber);
}

[Fact]
public void TestAddStringToString()
{
var exp = new Add(
new StringExpression("a"),
new StringExpression("b")
);

Test(exp, ResultTypes.String);
}

[Fact]
public void TestAddStringToNumber()
{
var exp = new Add(
new StringExpression("a"),
Number.One
);

Test(exp, ResultTypes.String);
}

[Fact]
public void TestAddNumberToString()
{
var exp = new Add(
Number.One,
new StringExpression("a")
);

Test(exp, ResultTypes.String);
}
}
}
1 change: 0 additions & 1 deletion xFunc.Tests/Analyzers/TypeAnalyzerTests/DivTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
using xFunc.Maths.Expressions;
using xFunc.Maths.Expressions.ComplexNumbers;
using xFunc.Maths.Expressions.LogicalAndBitwise;
using xFunc.Maths.Expressions.Units;
using xFunc.Maths.Expressions.Units.AngleUnits;
using xFunc.Maths.Expressions.Units.PowerUnits;
using Xunit;
Expand Down
1 change: 0 additions & 1 deletion xFunc.Tests/Analyzers/TypeAnalyzerTests/MulTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
using xFunc.Maths.Expressions.ComplexNumbers;
using xFunc.Maths.Expressions.LogicalAndBitwise;
using xFunc.Maths.Expressions.Matrices;
using xFunc.Maths.Expressions.Units;
using xFunc.Maths.Expressions.Units.AngleUnits;
using xFunc.Maths.Expressions.Units.PowerUnits;
using Xunit;
Expand Down
1 change: 0 additions & 1 deletion xFunc.Tests/Analyzers/TypeAnalyzerTests/SubTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
using xFunc.Maths.Expressions.ComplexNumbers;
using xFunc.Maths.Expressions.LogicalAndBitwise;
using xFunc.Maths.Expressions.Matrices;
using xFunc.Maths.Expressions.Units;
using xFunc.Maths.Expressions.Units.AngleUnits;
using xFunc.Maths.Expressions.Units.PowerUnits;
using Xunit;
Expand Down
41 changes: 39 additions & 2 deletions xFunc.Tests/Expressions/AddTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,8 @@
using System;
using System.Numerics;
using xFunc.Maths.Expressions;
using xFunc.Maths.Expressions.Collections;
using xFunc.Maths.Expressions.ComplexNumbers;
using xFunc.Maths.Expressions.LogicalAndBitwise;
using xFunc.Maths.Expressions.Units;
using xFunc.Maths.Expressions.Units.AngleUnits;
using xFunc.Maths.Expressions.Units.PowerUnits;
using Xunit;
Expand Down Expand Up @@ -223,6 +221,45 @@ public void ExecutePowerAndPower()
Assert.Equal(expected, actual);
}

[Fact]
public void ExecuteStringAndString()
{
var exp = new Add(
new StringExpression("a"),
new StringExpression("b")
);
var actual = exp.Execute();
var expected = "ab";

Assert.Equal(expected, actual);
}

[Fact]
public void ExecuteStringAndNumber()
{
var exp = new Add(
new StringExpression("a"),
Number.One
);
var actual = exp.Execute();
var expected = "a1";

Assert.Equal(expected, actual);
}

[Fact]
public void ExecuteNumberAndString()
{
var exp = new Add(
Number.One,
new StringExpression("b")
);
var actual = exp.Execute();
var expected = "1b";

Assert.Equal(expected, actual);
}

[Fact]
public void ExecuteTestException()
=> TestNotSupported(new Add(Bool.False, Bool.False));
Expand Down
1 change: 0 additions & 1 deletion xFunc.Tests/Expressions/CeilTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@

using xFunc.Maths.Expressions;
using xFunc.Maths.Expressions.LogicalAndBitwise;
using xFunc.Maths.Expressions.Units;
using xFunc.Maths.Expressions.Units.AngleUnits;
using xFunc.Maths.Expressions.Units.PowerUnits;
using Xunit;
Expand Down
1 change: 0 additions & 1 deletion xFunc.Tests/Expressions/DivTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
using xFunc.Maths.Expressions;
using xFunc.Maths.Expressions.ComplexNumbers;
using xFunc.Maths.Expressions.LogicalAndBitwise;
using xFunc.Maths.Expressions.Units;
using xFunc.Maths.Expressions.Units.AngleUnits;
using xFunc.Maths.Expressions.Units.PowerUnits;
using Xunit;
Expand Down
1 change: 0 additions & 1 deletion xFunc.Tests/Expressions/FloorTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@

using xFunc.Maths.Expressions;
using xFunc.Maths.Expressions.LogicalAndBitwise;
using xFunc.Maths.Expressions.Units;
using xFunc.Maths.Expressions.Units.AngleUnits;
using xFunc.Maths.Expressions.Units.PowerUnits;
using Xunit;
Expand Down
1 change: 0 additions & 1 deletion xFunc.Tests/Expressions/FracTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@

using xFunc.Maths.Expressions;
using xFunc.Maths.Expressions.LogicalAndBitwise;
using xFunc.Maths.Expressions.Units;
using xFunc.Maths.Expressions.Units.AngleUnits;
using xFunc.Maths.Expressions.Units.PowerUnits;
using Xunit;
Expand Down
1 change: 0 additions & 1 deletion xFunc.Tests/Expressions/MulTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
using xFunc.Maths.Expressions;
using xFunc.Maths.Expressions.ComplexNumbers;
using xFunc.Maths.Expressions.LogicalAndBitwise;
using xFunc.Maths.Expressions.Units;
using xFunc.Maths.Expressions.Units.AngleUnits;
using xFunc.Maths.Expressions.Units.PowerUnits;
using Xunit;
Expand Down
1 change: 0 additions & 1 deletion xFunc.Tests/Expressions/SignTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@

using xFunc.Maths.Expressions;
using xFunc.Maths.Expressions.LogicalAndBitwise;
using xFunc.Maths.Expressions.Units;
using xFunc.Maths.Expressions.Units.AngleUnits;
using xFunc.Maths.Expressions.Units.PowerUnits;
using Xunit;
Expand Down
1 change: 0 additions & 1 deletion xFunc.Tests/Expressions/SubTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
using xFunc.Maths.Expressions;
using xFunc.Maths.Expressions.ComplexNumbers;
using xFunc.Maths.Expressions.LogicalAndBitwise;
using xFunc.Maths.Expressions.Units;
using xFunc.Maths.Expressions.Units.AngleUnits;
using xFunc.Maths.Expressions.Units.PowerUnits;
using Xunit;
Expand Down
1 change: 0 additions & 1 deletion xFunc.Tests/Expressions/TruncTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@

using xFunc.Maths.Expressions;
using xFunc.Maths.Expressions.LogicalAndBitwise;
using xFunc.Maths.Expressions.Units;
using xFunc.Maths.Expressions.Units.AngleUnits;
using xFunc.Maths.Expressions.Units.PowerUnits;
using Xunit;
Expand Down
1 change: 0 additions & 1 deletion xFunc.Tests/Expressions/UnaryMinusTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
using xFunc.Maths.Expressions;
using xFunc.Maths.Expressions.ComplexNumbers;
using xFunc.Maths.Expressions.LogicalAndBitwise;
using xFunc.Maths.Expressions.Units;
using xFunc.Maths.Expressions.Units.AngleUnits;
using xFunc.Maths.Expressions.Units.PowerUnits;
using Xunit;
Expand Down
1 change: 0 additions & 1 deletion xFunc.Tests/ParserTests/AngleTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
// See the License for the specific language governing permissions and
// limitations under the License.

using xFunc.Maths.Expressions;
using xFunc.Maths.Expressions.Units;
using xFunc.Maths.Expressions.Units.AngleUnits;
using Xunit;
Expand Down
1 change: 0 additions & 1 deletion xFunc.Tests/ParserTests/PowerUnitTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
// See the License for the specific language governing permissions and
// limitations under the License.

using xFunc.Maths.Expressions;
using xFunc.Maths.Expressions.Units.PowerUnits;
using Xunit;

Expand Down

0 comments on commit d99a754

Please sign in to comment.