Implemented overloaded versions of Parse and TryParse functions for BigInteger.
[mono.git] / mcs / class / System.Core / Test / System.Linq.Expressions / ExpressionTest_LessThan.cs
index 3ef3a3707918bf1abf496141d5164ed9832be479..7a24ea291115799077da2a32e12b1db5fe1d2b33 100644 (file)
@@ -144,5 +144,68 @@ namespace MonoTests.System.Linq.Expressions
                        Assert.AreEqual ((bool?) false, lt (2, 1));
                        Assert.AreEqual ((bool?) false, lt (1, 1));
                }
+
+               struct Slot {
+                       public int Value;
+
+                       public Slot (int val)
+                       {
+                               Value = val;
+                       }
+
+                       public static bool operator > (Slot a, Slot b)
+                       {
+                               return a.Value > b.Value;
+                       }
+
+                       public static bool operator < (Slot a, Slot b)
+                       {
+                               return a.Value < b.Value;
+                       }
+               }
+
+               [Test]
+               public void UserDefinedLessThanLifted ()
+               {
+                       var l = Expression.Parameter (typeof (Slot?), "l");
+                       var r = Expression.Parameter (typeof (Slot?), "r");
+
+                       var node = Expression.LessThan (l, r);
+                       Assert.IsTrue (node.IsLifted);
+                       Assert.IsFalse (node.IsLiftedToNull);
+                       Assert.AreEqual (typeof (bool), node.Type);
+                       Assert.IsNotNull (node.Method);
+
+                       var lte = Expression.Lambda<Func<Slot?, Slot?, bool>> (node, l, r).Compile ();
+
+                       Assert.AreEqual (false, lte (new Slot (1), new Slot (0)));
+                       Assert.AreEqual (true, lte (new Slot (-1), new Slot (1)));
+                       Assert.AreEqual (false, lte (new Slot (1), new Slot (1)));
+                       Assert.AreEqual (false, lte (null, new Slot (1)));
+                       Assert.AreEqual (false, lte (new Slot (1), null));
+                       Assert.AreEqual (false, lte (null, null));
+               }
+
+               [Test]
+               public void UserDefinedLessThanLiftedToNull ()
+               {
+                       var l = Expression.Parameter (typeof (Slot?), "l");
+                       var r = Expression.Parameter (typeof (Slot?), "r");
+
+                       var node = Expression.LessThan (l, r, true, null);
+                       Assert.IsTrue (node.IsLifted);
+                       Assert.IsTrue (node.IsLiftedToNull);
+                       Assert.AreEqual (typeof (bool?), node.Type);
+                       Assert.IsNotNull (node.Method);
+
+                       var lte = Expression.Lambda<Func<Slot?, Slot?, bool?>> (node, l, r).Compile ();
+
+                       Assert.AreEqual (false, lte (new Slot (1), new Slot (0)));
+                       Assert.AreEqual (true, lte (new Slot (-1), new Slot (1)));
+                       Assert.AreEqual (false, lte (new Slot (1), new Slot (1)));
+                       Assert.AreEqual (null, lte (null, new Slot (1)));
+                       Assert.AreEqual (null, lte (new Slot (1), null));
+                       Assert.AreEqual (null, lte (null, null));
+               }
        }
 }