From ab971ef0056bf749703965ac7da18aa82e1404f4 Mon Sep 17 00:00:00 2001 From: dadhi Date: Sat, 30 Mar 2024 22:30:04 +0100 Subject: [PATCH] added failing test for #399 --- .../ILReaderFactory.cs | 10 ++++- .../Program.cs | 3 ++ .../BinaryExpressionTests.cs | 41 ++++++++++++++++++- 3 files changed, 51 insertions(+), 3 deletions(-) diff --git a/test/FastExpressionCompiler.ILDecoder/ILReaderFactory.cs b/test/FastExpressionCompiler.ILDecoder/ILReaderFactory.cs index 2df01ac1..6a0c13af 100644 --- a/test/FastExpressionCompiler.ILDecoder/ILReaderFactory.cs +++ b/test/FastExpressionCompiler.ILDecoder/ILReaderFactory.cs @@ -89,10 +89,16 @@ public static StringBuilder ToILString(this MethodInfo method, StringBuilder s = s.Append(' ').Append(sbr.TargetOffset); else if (il is InlineStringInstruction si) s.Append(" \"").Append(si.String).Append('"'); - else if (il is InlineIInstruction ii) - s.Append(' ').Append(ii.Int32); else if (il is ShortInlineIInstruction sii) s.Append(' ').Append(sii.Byte); + else if (il is InlineIInstruction ii) + s.Append(' ').Append(ii.Int32); + else if (il is InlineI8Instruction i8) + s.Append(' ').Append(i8.Int64); + else if (il is ShortInlineRInstruction sir) + s.Append(' ').Append(sir.Single); + else if (il is InlineRInstruction ir) + s.Append(' ').Append(ir.Double); else if (il is InlineVarInstruction iv) s.Append(' ').Append(iv.Ordinal); else if (il is ShortInlineVarInstruction siv) diff --git a/test/FastExpressionCompiler.TestsRunner/Program.cs b/test/FastExpressionCompiler.TestsRunner/Program.cs index 21800a23..35789a8e 100644 --- a/test/FastExpressionCompiler.TestsRunner/Program.cs +++ b/test/FastExpressionCompiler.TestsRunner/Program.cs @@ -9,6 +9,9 @@ public class Program { public static void Main() { + new LightExpression.UnitTests.BinaryExpressionTests().Run(); + // new LightExpression.IssueTests.Issue346_Is_it_possible_to_implement_ref_local_variables().Run(); + RunAllTests(); // new Issue127_Switch_is_supported().Run(); diff --git a/test/FastExpressionCompiler.UnitTests/BinaryExpressionTests.cs b/test/FastExpressionCompiler.UnitTests/BinaryExpressionTests.cs index f8d66c5f..3f65ca98 100644 --- a/test/FastExpressionCompiler.UnitTests/BinaryExpressionTests.cs +++ b/test/FastExpressionCompiler.UnitTests/BinaryExpressionTests.cs @@ -16,6 +16,7 @@ public class BinaryExpressionTests : ITest { public int Run() { + // Coalesce_for_nullable_long_Automapper_test_Should_substitute_zero_for_null(); Add_compiles(); AddAssign_compiles(); AddAssignChecked_compiles(); @@ -62,7 +63,7 @@ public int Run() SubtractAssign_compiles(); SubtractAssignChecked_compiles(); SubtractChecked_compiles(); - return 46; + return 47; } [Test] @@ -394,6 +395,44 @@ public void MakeBinary_Coalesce_compiles() Assert.AreEqual("", result); } + [Test] + public void Coalesce_for_nullable_long_Automapper_test_Should_substitute_zero_for_null() + { + var paramSource = Parameter(typeof(Source), "s"); + var paramDest = Parameter(typeof(Destination), "d"); + var tmpVar = Parameter(typeof(long?), "tmp"); + var e = Lambda>( + Block(new[] { tmpVar }, + Assign(tmpVar, Coalesce(Property(paramSource, nameof(Source.Number)), Constant(0L, typeof(long?)))), + Assign(Property(paramDest, nameof(Destination.Number)), tmpVar) + ), + paramSource, paramDest); + + e.PrintCSharp(); + + var fs = e.CompileSys(); + fs.PrintIL(); + var d = new Destination(); + fs(new Source(), d); + Assert.AreEqual(0, d.Number); + + var ff = e.CompileFast(true); + ff.PrintIL(); + d = new Destination(); + ff(new Source(), d); + Assert.AreEqual(0, d.Number); + } + + class Source + { + public long? Number { get; set; } + } + class Destination + { + public long? Number { get; set; } + } + + [Test] public void Modulo_compiles() {