Author: marek
Date: 2008-01-25 12:22:19 -0500 (Fri, 25 Jan 2008)
New Revision: 93927
Modified:
trunk/mcs/tests/gtest-etree-01.cs
Log:
New tests.
Modified: trunk/mcs/tests/gtest-etree-01.cs
===================================================================
--- trunk/mcs/tests/gtest-etree-01.cs 2008-01-25 17:21:36 UTC (rev 93926)
+++ trunk/mcs/tests/gtest-etree-01.cs 2008-01-25 17:22:19 UTC (rev 93927)
@@ -22,7 +22,8 @@
}
}
-/*
+/* TODO: Add tests for every numeric expression where a type has only 1
implicit
+ numeric conversion
public struct MyType<T>
{
T value;
@@ -63,16 +64,16 @@
return a.value != a;
}
- //public static implicit operator MyType (int i)
- //{
- // return new MyType (i);
- //}
-
public static MyType operator +(MyType a, MyType b)
{
return new MyType (a.value + b.value);
}
+ public static MyType operator / (MyType a, MyType b)
+ {
+ return new MyType (a.value / b.value);
+ }
+
public static MyType operator &(MyType a, MyType b)
{
return new MyType (a.value & b.value);
@@ -83,6 +84,31 @@
return new MyType (a.value | b.value);
}
+ public static MyType operator ^ (MyType a, MyType b)
+ {
+ return new MyType (a.value ^ b.value);
+ }
+
+ public static bool operator == (MyType a, MyType b)
+ {
+ return a.value == b.value;
+ }
+
+ public static bool operator != (MyType a, MyType b)
+ {
+ return a.value != b.value;
+ }
+
+ public static bool operator > (MyType a, MyType b)
+ {
+ return a.value > b.value;
+ }
+
+ public static bool operator >= (MyType a, MyType b)
+ {
+ return a.value >= b.value;
+ }
+
public override string ToString ()
{
return value.ToString ();
@@ -331,6 +357,9 @@
Expression<Func<MyType, int>> e4 = (MyType a) => (a);
AssertNodeType (e4, ExpressionType.Convert);
Assert (-9, e4.Compile ().Invoke (new MyType (-9)));
+
+ Expression<Func<MyType, MyType, bool?>> e5 = (MyType a, MyType
b) => a == b;
+ AssertNodeType (e5, ExpressionType.Convert);
}
public void ConvertCheckedTest ()
@@ -354,6 +383,115 @@
}
}
+ public void DivideTest ()
+ {
+ Expression<Func<int, int, int>> e = (int a, int b) => a / b;
+ AssertNodeType (e, ExpressionType.Divide);
+ Assert (2, e.Compile ().Invoke (60, 30));
+
+ Expression<Func<double?, double?, double?>> e2 = (a, b) => a /
b;
+ AssertNodeType (e2, ExpressionType.Divide);
+ Assert (null, e2.Compile ().Invoke (null, 3));
+ Assert (1.5, e2.Compile ().Invoke (3, 2));
+
+ Expression<Func<MyType, MyType, MyType>> e3 = (MyType a, MyType
b) => a / b;
+ AssertNodeType (e3, ExpressionType.Divide);
+ Assert (1, e3.Compile ().Invoke (new MyType (-20), new MyType
(-20)));
+
+ Expression<Func<MyType?, MyType?, MyType?>> e4 = (MyType? a,
MyType? b) => a / b;
+ AssertNodeType (e4, ExpressionType.Divide);
+ Assert (null, e4.Compile ().Invoke (null, new MyType (-20)));
+ Assert (new MyType (-6), e4.Compile ().Invoke (new MyType
(120), new MyType (-20)));
+ }
+
+ public void EqualTest ()
+ {
+ Expression<Func<int, int, bool>> e = (int a, int b) => a == b;
+ AssertNodeType (e, ExpressionType.Equal);
+ Assert (false, e.Compile ().Invoke (60, 30));
+ Assert (true, e.Compile ().Invoke (-1, -1));
+
+ Expression<Func<double?, double?, bool>> e2 = (a, b) => a == b;
+ AssertNodeType (e2, ExpressionType.Equal);
+ Assert (true, e2.Compile ().Invoke (3, 3));
+ Assert (false, e2.Compile ().Invoke (3, 2));
+
+ Expression<Func<MyType, MyType, bool>> e3 = (MyType a, MyType
b) => a == b;
+ AssertNodeType (e3, ExpressionType.Equal);
+ Assert (true, e3.Compile ().Invoke (new MyType (-20), new
MyType (-20)));
+
+ Expression<Func<MyType?, MyType?, bool>> e4 = (MyType? a,
MyType? b) => a == b;
+ AssertNodeType (e4, ExpressionType.Equal);
+ Assert (false, e4.Compile ().Invoke (null, new MyType (-20)));
+ Assert (true, e4.Compile ().Invoke (null, null));
+ Assert (true, e4.Compile ().Invoke (new MyType (120), new
MyType (120)));
+ }
+
+ public void ExclusiveOrTest ()
+ {
+ Expression<Func<int, int, int>> e = (int a, int b) => a ^ b;
+ AssertNodeType (e, ExpressionType.ExclusiveOr);
+ Assert (34, e.Compile ().Invoke (60, 30));
+/* FIXME: missing conversion
+ Expression<Func<byte?, byte?, int?>> e2 = (a, b) => a ^ b;
+ AssertNodeType (e2, ExpressionType.ExclusiveOr);
+ Assert (null, e2.Compile ().Invoke (null, 3));
+ Assert (1, e2.Compile ().Invoke (3, 2));
+*/
+ Expression<Func<MyType, MyType, MyType>> e3 = (MyType a, MyType
b) => a ^ b;
+ AssertNodeType (e3, ExpressionType.ExclusiveOr);
+ Assert (0, e3.Compile ().Invoke (new MyType (-20), new MyType
(-20)));
+
+ Expression<Func<MyType?, MyType?, MyType?>> e4 = (MyType? a,
MyType? b) => a ^ b;
+ AssertNodeType (e4, ExpressionType.ExclusiveOr);
+ Assert (null, e4.Compile ().Invoke (null, new MyType (-20)));
+ Assert (new MyType (-108), e4.Compile ().Invoke (new MyType
(120), new MyType (-20)));
+ }
+
+ public void GreaterThanTest ()
+ {
+ Expression<Func<int, int, bool>> e = (int a, int b) => a > b;
+ AssertNodeType (e, ExpressionType.GreaterThan);
+ Assert (true, e.Compile ().Invoke (60, 30));
+
+ Expression<Func<byte?, byte?, bool>> e2 = (a, b) => a > b;
+ AssertNodeType (e2, ExpressionType.GreaterThan);
+ Assert (false, e2.Compile ().Invoke (null, 3));
+ Assert (false, e2.Compile ().Invoke (2, 2));
+
+ Expression<Func<MyType, MyType, bool>> e3 = (MyType a, MyType
b) => a > b;
+ AssertNodeType (e3, ExpressionType.GreaterThan);
+ Assert (false, e3.Compile ().Invoke (new MyType (-20), new
MyType (-20)));
+
+ Expression<Func<MyType?, MyType?, bool>> e4 = (MyType? a,
MyType? b) => a > b;
+ AssertNodeType (e4, ExpressionType.GreaterThan);
+ Assert (false, e4.Compile ().Invoke (null, new MyType (-20)));
+ Assert (false, e4.Compile ().Invoke (null, null));
+ Assert (true, e4.Compile ().Invoke (new MyType (120), new
MyType (-20)));
+ }
+
+ public void GreaterThanOrEqualTest ()
+ {
+ Expression<Func<int, int, bool>> e = (int a, int b) => a >= b;
+ AssertNodeType (e, ExpressionType.GreaterThanOrEqual);
+ Assert (true, e.Compile ().Invoke (60, 30));
+
+ Expression<Func<byte?, byte?, bool>> e2 = (a, b) => a >= b;
+ AssertNodeType (e2, ExpressionType.GreaterThanOrEqual);
+ Assert (false, e2.Compile ().Invoke (null, 3));
+ Assert (true, e2.Compile ().Invoke (2, 2));
+
+ Expression<Func<MyType, MyType, bool>> e3 = (MyType a, MyType
b) => a >= b;
+ AssertNodeType (e3, ExpressionType.GreaterThanOrEqual);
+ Assert (true, e3.Compile ().Invoke (new MyType (-20), new
MyType (-20)));
+
+ Expression<Func<MyType?, MyType?, bool>> e4 = (MyType? a,
MyType? b) => a >= b;
+ AssertNodeType (e4, ExpressionType.GreaterThanOrEqual);
+ Assert (false, e4.Compile ().Invoke (null, new MyType (-20)));
+ Assert (false, e4.Compile ().Invoke (null, null));
+ Assert (true, e4.Compile ().Invoke (new MyType (120), new
MyType (-20)));
+ }
+
void NewArrayInitTest ()
{
Expression<Func<int []>> e = () => new int [0];
@@ -454,6 +592,11 @@
e.ConditionTest ();
e.ConvertTest ();
e.ConvertCheckedTest ();
+ e.DivideTest ();
+ e.EqualTest ();
+ e.ExclusiveOrTest ();
+ e.GreaterThanTest ();
+ e.GreaterThanOrEqualTest ();
e.NewArrayInitTest ();
e.OrTest ();
e.OrNullableTest ();
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches