summaryrefslogtreecommitdiff
path: root/ICSharpCode.Decompiler/Tests/IncrementDecrement.cs
diff options
context:
space:
mode:
authorJason Smith <jason.smith@xamarin.com>2016-03-22 13:02:25 -0700
committerJason Smith <jason.smith@xamarin.com>2016-03-22 16:13:41 -0700
commit17fdde66d94155fc62a034fa6658995bef6fd6e5 (patch)
treeb5e5073a2a7b15cdbe826faa5c763e270a505729 /ICSharpCode.Decompiler/Tests/IncrementDecrement.cs
downloadxamarin-forms-17fdde66d94155fc62a034fa6658995bef6fd6e5.tar.gz
xamarin-forms-17fdde66d94155fc62a034fa6658995bef6fd6e5.tar.bz2
xamarin-forms-17fdde66d94155fc62a034fa6658995bef6fd6e5.zip
Initial import
Diffstat (limited to 'ICSharpCode.Decompiler/Tests/IncrementDecrement.cs')
-rw-r--r--ICSharpCode.Decompiler/Tests/IncrementDecrement.cs254
1 files changed, 254 insertions, 0 deletions
diff --git a/ICSharpCode.Decompiler/Tests/IncrementDecrement.cs b/ICSharpCode.Decompiler/Tests/IncrementDecrement.cs
new file mode 100644
index 00000000..e06b680d
--- /dev/null
+++ b/ICSharpCode.Decompiler/Tests/IncrementDecrement.cs
@@ -0,0 +1,254 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy of this
+// software and associated documentation files (the "Software"), to deal in the Software
+// without restriction, including without limitation the rights to use, copy, modify, merge,
+// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
+// to whom the Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in all copies or
+// substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
+// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
+// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
+// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+
+using System;
+
+public class IncrementDecrement
+{
+ [Flags]
+ private enum MyEnum
+ {
+ None = 0,
+ One = 1,
+ Two = 2,
+ Four = 4
+ }
+
+ public class MutableClass
+ {
+ public int Field;
+
+ public int Property
+ {
+ get;
+ set;
+ }
+
+ public uint this[string name]
+ {
+ get
+ {
+ return 0u;
+ }
+ set
+ {
+ }
+ }
+ }
+
+ private IncrementDecrement.MyEnum enumField;
+ public static int StaticField;
+
+ public static int StaticProperty
+ {
+ get;
+ set;
+ }
+
+ private IncrementDecrement.MutableClass M()
+ {
+ return new IncrementDecrement.MutableClass();
+ }
+
+ private int[,] Array()
+ {
+ return null;
+ }
+
+ private unsafe int* GetPointer()
+ {
+ return null;
+ }
+
+ public int PreIncrementInAddition(int i, int j)
+ {
+ return i + ++j;
+ }
+
+ public int PreIncrementArrayElement(int[] array, int pos)
+ {
+ return --array[pos];
+ }
+
+ public int PreIncrementInstanceField()
+ {
+ return ++this.M().Field;
+ }
+
+ public int PreIncrementInstanceField2(IncrementDecrement.MutableClass m)
+ {
+ return ++m.Field;
+ }
+
+ public int PreIncrementInstanceProperty()
+ {
+ return ++this.M().Property;
+ }
+
+ public int PreIncrementStaticField()
+ {
+ return ++IncrementDecrement.StaticField;
+ }
+
+ public int PreIncrementStaticProperty()
+ {
+ return ++IncrementDecrement.StaticProperty;
+ }
+
+// public uint PreIncrementIndexer(string name)
+// {
+// return ++this.M()[name];
+// }
+
+ public int PreIncrementByRef(ref int i)
+ {
+ return ++i;
+ }
+
+ public unsafe int PreIncrementByPointer()
+ {
+ return ++(*this.GetPointer());
+ }
+
+ public int PreIncrement2DArray()
+ {
+ return ++this.Array()[1, 2];
+ }
+
+ public int CompoundAssignInstanceField()
+ {
+ return this.M().Field *= 10;
+ }
+
+ public int CompoundAssignInstanceProperty()
+ {
+ return this.M().Property *= 10;
+ }
+
+ public int CompoundAssignStaticField()
+ {
+ return IncrementDecrement.StaticField ^= 100;
+ }
+
+ public int CompoundAssignStaticProperty()
+ {
+ return IncrementDecrement.StaticProperty &= 10;
+ }
+
+ public int CompoundAssignArrayElement1(int[] array, int pos)
+ {
+ return array[pos] *= 10;
+ }
+
+ public int CompoundAssignArrayElement2(int[] array)
+ {
+ return array[Environment.TickCount] *= 10;
+ }
+
+// public uint CompoundAssignIndexer(string name)
+// {
+// return this.M()[name] -= 2;
+// }
+
+ public int CompoundAssignIncrement2DArray()
+ {
+ return this.Array()[1, 2] %= 10;
+ }
+
+ public int CompoundAssignByRef(ref int i)
+ {
+ return i <<= 2;
+ }
+
+ public unsafe double CompoundAssignByPointer(double* ptr)
+ {
+ return *ptr /= 1.5;
+ }
+
+ public void CompoundAssignEnum()
+ {
+ this.enumField |= IncrementDecrement.MyEnum.Two;
+ this.enumField &= ~IncrementDecrement.MyEnum.Four;
+ }
+
+ public int PostIncrementInAddition(int i, int j)
+ {
+ return i++ + j;
+ }
+
+ public void PostIncrementInlineLocalVariable(Func<int, int> f)
+ {
+ int num = 0;
+ f(num++);
+ }
+
+ public int PostIncrementArrayElement(int[] array, int pos)
+ {
+ return array[pos]--;
+ }
+
+ public int PostIncrementStaticField()
+ {
+ return IncrementDecrement.StaticField++;
+ }
+
+ public int PostIncrementStaticProperty()
+ {
+ return IncrementDecrement.StaticProperty++;
+ }
+
+ public int PostIncrementInstanceField(IncrementDecrement.MutableClass m)
+ {
+ return m.Field++;
+ }
+
+// public uint PostIncrementIndexer(string name)
+// {
+// return this.M()[name]++;
+// }
+
+// public unsafe int PostIncrementOfPointer(int* ptr)
+// {
+// return *(ptr++);
+// }
+
+ public int PostIncrementInstanceField()
+ {
+ return this.M().Field--;
+ }
+
+ public int PostIncrementInstanceProperty()
+ {
+ return this.M().Property--;
+ }
+
+ public int PostIncrement2DArray()
+ {
+ return this.Array()[IncrementDecrement.StaticField, IncrementDecrement.StaticProperty]++;
+ }
+
+ public int PostIncrementByRef(ref int i)
+ {
+ return i++;
+ }
+
+ public unsafe int PostIncrementByPointer()
+ {
+ return (*this.GetPointer())++;
+ }
+}