diff options
author | David Miller <dmiller2718@gmail.com> | 2009-02-21 06:55:20 +0000 |
---|---|---|
committer | David Miller <dmiller2718@gmail.com> | 2009-02-21 06:55:20 +0000 |
commit | 67f56f0795ac0214f9828c42f8face229e204c1d (patch) | |
tree | f01b57d581c3a48d87fb4d72b023bc8d609a24cd /ClojureCLR/Clojure/Clojure.Tests/LibTests/NumbersTests.cs | |
parent | 64d79207eed0fe057a19fe4d3d0f6b714a63c69a (diff) |
ClojureCLR: added ClojureCLR project to repo.
Diffstat (limited to 'ClojureCLR/Clojure/Clojure.Tests/LibTests/NumbersTests.cs')
-rw-r--r-- | ClojureCLR/Clojure/Clojure.Tests/LibTests/NumbersTests.cs | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/ClojureCLR/Clojure/Clojure.Tests/LibTests/NumbersTests.cs b/ClojureCLR/Clojure/Clojure.Tests/LibTests/NumbersTests.cs new file mode 100644 index 00000000..e5c869fc --- /dev/null +++ b/ClojureCLR/Clojure/Clojure.Tests/LibTests/NumbersTests.cs @@ -0,0 +1,137 @@ +/**
+ * Copyright (c) David Miller. All rights reserved.
+ * The use and distribution terms for this software are covered by the
+ * Eclipse Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php)
+ * which can be found in the file epl-v10.html at the root of this distribution.
+ * By using this software in any fashion, you are agreeing to be bound by
+ * the terms of this license.
+ * You must not remove this notice, or any other, from this software.
+ **/
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+using NUnit.Framework;
+using Rhino.Mocks;
+
+using clojure.lang;
+using java.math;
+
+namespace Clojure.Tests.LibTests
+{
+ [TestFixture]
+ public class NumbersTests : AssertionHelper
+ {
+ #region Helpers
+
+ private void ExpectInt32(object x)
+ {
+ Expect(x, TypeOf(typeof(Int32)));
+ }
+
+ private void ExpectSameObject(object x, object y)
+ {
+ Expect(x, SameAs(y));
+ }
+
+ private void ExpectEqualObject(object x, object y)
+ {
+ Expect(x, EqualTo(y));
+ }
+
+ #endregion
+
+ #region reduce tests
+
+ [Test]
+ public void ReduceOnBigIntReducesSmallerValues()
+ {
+ BigInteger b1 = new BigInteger("123");
+ BigInteger b2 = new BigInteger("0");
+ BigInteger b3 = new BigInteger(Int32.MaxValue.ToString());
+ BigInteger b4 = new BigInteger(Int32.MinValue.ToString());
+
+ ExpectInt32(Numbers.reduce(b1));
+ ExpectInt32(Numbers.reduce(b2));
+ ExpectInt32(Numbers.reduce(b3));
+ ExpectInt32(Numbers.reduce(b4));
+ }
+
+ [Test]
+ public void ReduceOnBigIntReturnsLargerValues()
+ {
+ BigInteger b1 = new BigInteger("100000000000000000000", 16);
+ BigInteger b2 = b1.negate();
+ BigInteger b3 = new BigInteger("123456789012345678901234567890");
+ BigInteger b4 = b3.negate();
+
+ ExpectSameObject(b1, Numbers.reduce(b1));
+ ExpectSameObject(b2, Numbers.reduce(b2));
+ ExpectSameObject(b3, Numbers.reduce(b3));
+ ExpectSameObject(b4, Numbers.reduce(b4));
+ }
+
+ [Test]
+ public void ReduceOnLongReducesSmallerValues()
+ {
+ long b1 = 123;
+ long b2 = 0;
+ long b3 = Int32.MaxValue;
+ long b4 = Int32.MinValue;
+
+ ExpectInt32(Numbers.reduce(b1));
+ ExpectInt32(Numbers.reduce(b2));
+ ExpectInt32(Numbers.reduce(b3));
+ ExpectInt32(Numbers.reduce(b4));
+ }
+
+
+ [Test]
+ public void ReduceOnLongReturnsLargerValues()
+ {
+ long b1 = ((long)Int32.MaxValue) + 1;
+ long b2 = ((long)Int32.MinValue) - 1;
+ long b3 = 123456789000;
+ long b4 = -b3;
+
+ ExpectEqualObject(b1, Numbers.reduce(b1));
+ ExpectEqualObject(b2, Numbers.reduce(b2));
+ ExpectEqualObject(b3, Numbers.reduce(b3));
+ ExpectEqualObject(b4, Numbers.reduce(b4));
+ }
+
+ #endregion
+
+ #region divide tests
+
+ [Test]
+ [ExpectedException(typeof(ArithmeticException))]
+ public void DivideByZeroFails()
+ {
+ object o = Numbers.BIDivide(Numbers.BigIntegerOne, Numbers.BigIntegerZero);
+ }
+
+ [Test]
+ public void DivideReducesToIntOnDenomOne()
+ {
+ object o = Numbers.BIDivide(new BigInteger("75"), new BigInteger("25"));
+ Expect(o, EqualTo(3));
+ }
+
+ [Test]
+ public void DivideReturnsReducedRatio()
+ {
+ object o = Numbers.BIDivide(new BigInteger("42"), new BigInteger("30"));
+
+ Expect(o, TypeOf(typeof(Ratio)));
+
+ Ratio r = o as Ratio;
+ Expect(r.Numerator, EqualTo(new BigInteger("7")));
+ Expect(r.Denominator, EqualTo(new BigInteger("5")));
+ }
+
+ #endregion
+ }
+}
|