diff --git a/src/Domain/HydraScript.Domain.BackEnd/Impl/Instructions/WithAssignment/Simple.cs b/src/Domain/HydraScript.Domain.BackEnd/Impl/Instructions/WithAssignment/Simple.cs index b85c3ef0..e613c535 100644 --- a/src/Domain/HydraScript.Domain.BackEnd/Impl/Instructions/WithAssignment/Simple.cs +++ b/src/Domain/HydraScript.Domain.BackEnd/Impl/Instructions/WithAssignment/Simple.cs @@ -73,8 +73,8 @@ protected virtual void Assign() { "-" => -Convert.ToDouble(value), "!" => !Convert.ToBoolean(value), - "~" when value is List list => list.Count, - "~" when value is string @string => @string.Length, + "~" when value is List list => Convert.ToDouble(list.Count), + "~" when value is string @string => Convert.ToDouble(@string.Length), "" => value, _ => throw new NotSupportedException($"_operator {_operator} is not supported") }; diff --git a/tests/HydraScript.IntegrationTests/SuccessPrograms/ArithmeticTests.cs b/tests/HydraScript.IntegrationTests/SuccessPrograms/ArithmeticTests.cs new file mode 100644 index 00000000..f9889839 --- /dev/null +++ b/tests/HydraScript.IntegrationTests/SuccessPrograms/ArithmeticTests.cs @@ -0,0 +1,32 @@ +using HydraScript.Infrastructure; + +namespace HydraScript.IntegrationTests.SuccessPrograms; + +public class ArithmeticTests(TestHostFixture fixture) : IClassFixture +{ + /// + /// https://github.com/Stepami/hydrascript/issues/232 + /// + [Fact] + public void Equality_AdditionToTheLeft_Success() + { + const string script = + """ + let i = 0 + const s = "abcdef" + const sLen = ~s + while (i < sLen) { + if (i + 1 == sLen) + >>> "i is 5" + i = i + 1 + } + """; + using var runner = fixture.GetRunner( + new TestHostFixture.Options( + InMemoryScript: script)); + var code = runner.Invoke(); + code.Should().Be(Executor.ExitCodes.Success); + fixture.LogMessages.Should() + .Contain(log => log.Contains("i is 5")); + } +} \ No newline at end of file diff --git a/tests/HydraScript.IntegrationTests/DumpOptionTests.cs b/tests/HydraScript.IntegrationTests/SuccessPrograms/DumpOptionTests.cs similarity index 96% rename from tests/HydraScript.IntegrationTests/DumpOptionTests.cs rename to tests/HydraScript.IntegrationTests/SuccessPrograms/DumpOptionTests.cs index 29bee0be..7102853d 100644 --- a/tests/HydraScript.IntegrationTests/DumpOptionTests.cs +++ b/tests/HydraScript.IntegrationTests/SuccessPrograms/DumpOptionTests.cs @@ -3,7 +3,7 @@ using Microsoft.Extensions.DependencyInjection; using NSubstitute; -namespace HydraScript.IntegrationTests; +namespace HydraScript.IntegrationTests.SuccessPrograms; public class DumpOptionTests(TestHostFixture fixture) : IClassFixture { diff --git a/tests/HydraScript.IntegrationTests/InputTests.cs b/tests/HydraScript.IntegrationTests/SuccessPrograms/InputTests.cs similarity index 94% rename from tests/HydraScript.IntegrationTests/InputTests.cs rename to tests/HydraScript.IntegrationTests/SuccessPrograms/InputTests.cs index 5722ab83..10b82031 100644 --- a/tests/HydraScript.IntegrationTests/InputTests.cs +++ b/tests/HydraScript.IntegrationTests/SuccessPrograms/InputTests.cs @@ -3,7 +3,7 @@ using Microsoft.Extensions.DependencyInjection.Extensions; using NSubstitute; -namespace HydraScript.IntegrationTests; +namespace HydraScript.IntegrationTests.SuccessPrograms; public class InputTests(TestHostFixture fixture) : IClassFixture { diff --git a/tests/HydraScript.IntegrationTests/SuccessfulProgramsTests.cs b/tests/HydraScript.IntegrationTests/SuccessPrograms/SuccessfulProgramsTests.cs similarity index 93% rename from tests/HydraScript.IntegrationTests/SuccessfulProgramsTests.cs rename to tests/HydraScript.IntegrationTests/SuccessPrograms/SuccessfulProgramsTests.cs index ffd0df6d..9cf78807 100644 --- a/tests/HydraScript.IntegrationTests/SuccessfulProgramsTests.cs +++ b/tests/HydraScript.IntegrationTests/SuccessPrograms/SuccessfulProgramsTests.cs @@ -1,6 +1,6 @@ using HydraScript.Infrastructure; -namespace HydraScript.IntegrationTests; +namespace HydraScript.IntegrationTests.SuccessPrograms; public class SuccessfulProgramsTests(TestHostFixture fixture) : IClassFixture {