Browse Source

Add DelegateConstruction tests

pull/892/merge
Siegfried Pammer 8 years ago
parent
commit
911cdbca66
  1. 1
      ICSharpCode.Decompiler.Tests/ICSharpCode.Decompiler.Tests.csproj
  2. 6
      ICSharpCode.Decompiler.Tests/PrettyTestRunner.cs
  3. 61
      ICSharpCode.Decompiler.Tests/TestCases/Pretty/DelegateConstruction.cs
  4. 1400
      ICSharpCode.Decompiler.Tests/TestCases/Pretty/DelegateConstruction.il
  5. 1150
      ICSharpCode.Decompiler.Tests/TestCases/Pretty/DelegateConstruction.opt.il
  6. 1144
      ICSharpCode.Decompiler.Tests/TestCases/Pretty/DelegateConstruction.opt.roslyn.il
  7. 1362
      ICSharpCode.Decompiler.Tests/TestCases/Pretty/DelegateConstruction.roslyn.il

1
ICSharpCode.Decompiler.Tests/ICSharpCode.Decompiler.Tests.csproj

@ -51,6 +51,7 @@
<ItemGroup> <ItemGroup>
<Compile Include="DataFlowTest.cs" /> <Compile Include="DataFlowTest.cs" />
<Compile Include="TestCases\Pretty\DelegateConstruction.cs" />
<Compile Include="Helpers\CodeAssert.cs" /> <Compile Include="Helpers\CodeAssert.cs" />
<Compile Include="Helpers\SdkUtility.cs" /> <Compile Include="Helpers\SdkUtility.cs" />
<Compile Include="Helpers\RemoveCompilerAttribute.cs" /> <Compile Include="Helpers\RemoveCompilerAttribute.cs" />

6
ICSharpCode.Decompiler.Tests/PrettyTestRunner.cs

@ -97,6 +97,12 @@ namespace ICSharpCode.Decompiler.Tests
Run(cscOptions: cscOptions); Run(cscOptions: cscOptions);
} }
[Test, Ignore]
public void DelegateConstruction([ValueSource("defaultOptions")] CompilerOptions cscOptions)
{
Run(cscOptions: cscOptions);
}
[Test] [Test]
public void AnonymousTypes([Values(CompilerOptions.None, CompilerOptions.Optimize)] CompilerOptions cscOptions) public void AnonymousTypes([Values(CompilerOptions.None, CompilerOptions.Optimize)] CompilerOptions cscOptions)
{ {

61
ICSharpCode.Decompiler.Tests/DelegateConstruction.cs → ICSharpCode.Decompiler.Tests/TestCases/Pretty/DelegateConstruction.cs

@ -22,19 +22,19 @@ using System.Linq;
public static class DelegateConstruction public static class DelegateConstruction
{ {
class InstanceTests private class InstanceTests
{ {
public Action CaptureOfThis() public Action CaptureOfThis()
{ {
return delegate { return (Action)delegate {
CaptureOfThis(); this.CaptureOfThis();
}; };
} }
public Action CaptureOfThisAndParameter(int a) public Action CaptureOfThisAndParameter(int a)
{ {
return delegate { return (Action)delegate {
CaptureOfThisAndParameter(a); this.CaptureOfThisAndParameter(a);
}; };
} }
@ -42,8 +42,8 @@ public static class DelegateConstruction
{ {
foreach (int item in Enumerable.Empty<int>()) { foreach (int item in Enumerable.Empty<int>()) {
if (item > 0) { if (item > 0) {
return delegate { return (Action)delegate {
CaptureOfThisAndParameter(item + a); this.CaptureOfThisAndParameter(item + a);
}; };
} }
} }
@ -55,8 +55,8 @@ public static class DelegateConstruction
foreach (int item in Enumerable.Empty<int>()) { foreach (int item in Enumerable.Empty<int>()) {
int copyOfItem = item; int copyOfItem = item;
if (item > 0) { if (item > 0) {
return delegate { return (Action)delegate {
CaptureOfThisAndParameter(item + a + copyOfItem); this.CaptureOfThisAndParameter(item + a + copyOfItem);
}; };
} }
} }
@ -66,7 +66,7 @@ public static class DelegateConstruction
public void LambdaInForLoop() public void LambdaInForLoop()
{ {
for (int i = 0; i < 100000; i++) { for (int i = 0; i < 100000; i++) {
Bar(() => Foo()); this.Bar((Func<int>)(() => this.Foo()));
} }
} }
@ -117,14 +117,11 @@ public static class DelegateConstruction
public static List<Action<int>> AnonymousMethodStoreWithinLoop() public static List<Action<int>> AnonymousMethodStoreWithinLoop()
{ {
List<Action<int>> list = new List<Action<int>>(); List<Action<int>> list = new List<Action<int>>();
for (int i = 0; i < 10; i++) for (int i = 0; i < 10; i++) {
{
int counter; int counter;
list.Add(delegate(int x) list.Add((Action<int>)delegate(int x) {
{
counter = x; counter = x;
} });
);
} }
return list; return list;
} }
@ -133,21 +130,17 @@ public static class DelegateConstruction
{ {
List<Action<int>> list = new List<Action<int>>(); List<Action<int>> list = new List<Action<int>>();
int counter; int counter;
for (int i = 0; i < 10; i++) for (int i = 0; i < 10; i++) {
{ list.Add((Action<int>)delegate(int x) {
list.Add(delegate(int x)
{
counter = x; counter = x;
} });
);
} }
return list; return list;
} }
public static Action StaticAnonymousMethodNoClosure() public static Action StaticAnonymousMethodNoClosure()
{ {
return delegate return (Action)delegate {
{
Console.WriteLine(); Console.WriteLine();
}; };
} }
@ -156,16 +149,15 @@ public static class DelegateConstruction
{ {
// i is captured variable, // i is captured variable,
// j is parameter in anonymous method // j is parameter in anonymous method
// k is local in anonymous method, // l is local in anonymous method,
// l is local in main method // k is local in main method
// Ensure that the decompiler doesn't introduce name conflicts // Ensure that the decompiler doesn't introduce name conflicts
List<Action<int>> list = new List<Action<int>>(); List<Action<int>> list = new List<Action<int>>();
for (int l = 0; l < 10; l++) { for (int k = 0; k < 10; k++) {
int i; int i;
for (i = 0; i < 10; i++) { for (i = 0; i < 10; i++) {
list.Add( list.Add((Action<int>)delegate(int j) {
delegate (int j) { for (int l = 0; l < i; l += j) {
for (int k = 0; k < i; k += j) {
Console.WriteLine(); Console.WriteLine();
} }
}); });
@ -177,8 +169,7 @@ public static class DelegateConstruction
{ {
List<Action<int>> list = new List<Action<int>>(); List<Action<int>> list = new List<Action<int>>();
for (int k = 0; k < 10; k++) { for (int k = 0; k < 10; k++) {
list.Add( list.Add((Action<int>)delegate(int i) {
delegate(int i) {
Console.WriteLine(i); Console.WriteLine(i);
}); });
} }
@ -186,7 +177,7 @@ public static class DelegateConstruction
public static Action<int> NameConflict3(int i) public static Action<int> NameConflict3(int i)
{ {
return delegate(int j) { return (Action<int>)delegate(int j) {
for (int k = 0; k < j; k++) { for (int k = 0; k < j; k++) {
Console.WriteLine(k); Console.WriteLine(k);
} }
@ -195,11 +186,11 @@ public static class DelegateConstruction
public static Func<int, Func<int, int>> CurriedAddition(int a) public static Func<int, Func<int, int>> CurriedAddition(int a)
{ {
return b => c => a + b + c; return (Func<int, Func<int, int>>)((int b) => (Func<int, int>)((int c) => a + b + c));
} }
public static Func<int, Func<int, Func<int, int>>> CurriedAddition2(int a) public static Func<int, Func<int, Func<int, int>>> CurriedAddition2(int a)
{ {
return b => c => d => a + b + c + d; return (Func<int, Func<int, Func<int, int>>>)((int b) => (Func<int, Func<int, int>>)((int c) => (Func<int, int>)((int d) => a + b + c + d)));
} }
} }

1400
ICSharpCode.Decompiler.Tests/TestCases/Pretty/DelegateConstruction.il

File diff suppressed because it is too large Load Diff

1150
ICSharpCode.Decompiler.Tests/TestCases/Pretty/DelegateConstruction.opt.il

File diff suppressed because it is too large Load Diff

1144
ICSharpCode.Decompiler.Tests/TestCases/Pretty/DelegateConstruction.opt.roslyn.il

File diff suppressed because it is too large Load Diff

1362
ICSharpCode.Decompiler.Tests/TestCases/Pretty/DelegateConstruction.roslyn.il

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save