X Tutup
using System; using System.Globalization; using System.Linq; using System.Numerics; using NUnit.Framework; using Python.Runtime; namespace Python.EmbeddingTest { public class TestPyInt { [Test] public void TestCtorInt() { const int i = 5; var a = new PyInt(i); Assert.AreEqual(i, a.ToInt32()); } [Test] public void TestCtorUInt() { const uint i = 5; var a = new PyInt(i); Assert.AreEqual(i, a.ToInt32()); } [Test] public void TestCtorLong() { const long i = 5; var a = new PyInt(i); Assert.AreEqual(i, a.ToInt32()); } [Test] public void TestCtorULong() { const ulong i = 5; var a = new PyInt(i); Assert.AreEqual(i, a.ToInt32()); } [Test] public void TestCtorShort() { const short i = 5; var a = new PyInt(i); Assert.AreEqual(i, a.ToInt32()); } [Test] public void TestCtorUShort() { const ushort i = 5; var a = new PyInt(i); Assert.AreEqual(i, a.ToInt32()); } [Test] public void TestCtorByte() { const byte i = 5; var a = new PyInt(i); Assert.AreEqual(i, a.ToInt32()); } [Test] public void TestCtorSByte() { const sbyte i = 5; var a = new PyInt(i); Assert.AreEqual(i, a.ToInt32()); } [Test] public void TestCtorPyObject() { var i = new PyInt(5); var a = new PyInt(i); Assert.AreEqual(5, a.ToInt32()); } [Test] public void TestCtorBadPyObject() { var i = new PyString("Foo"); PyInt a = null; var ex = Assert.Throws(() => a = new PyInt(i)); StringAssert.StartsWith("object is not an int", ex.Message); Assert.IsNull(a); } [Test] public void TestCtorString() { const string i = "5"; var a = new PyInt(i); Assert.AreEqual(5, a.ToInt32()); } [Test] public void TestCtorBadString() { const string i = "Foo"; PyInt a = null; var ex = Assert.Throws(() => a = new PyInt(i)); StringAssert.StartsWith("invalid literal for int", ex.Message); Assert.IsNull(a); } [Test] public void TestIsIntTypeTrue() { var i = new PyInt(5); Assert.True(PyInt.IsIntType(i)); } [Test] public void TestIsIntTypeFalse() { var s = new PyString("Foo"); Assert.False(PyInt.IsIntType(s)); } [Test] public void TestAsIntGood() { var i = new PyInt(5); var a = PyInt.AsInt(i); Assert.AreEqual(5, a.ToInt32()); } [Test] public void TestAsIntBad() { var s = new PyString("Foo"); PyInt a = null; var ex = Assert.Throws(() => a = PyInt.AsInt(s)); StringAssert.StartsWith("invalid literal for int", ex.Message); Assert.IsNull(a); } [Test] public void TestConvertToInt32() { var a = new PyInt(5); Assert.IsInstanceOf(typeof(int), a.ToInt32()); Assert.AreEqual(5, a.ToInt32()); } [Test] public void TestConvertToInt16() { var a = new PyInt(5); Assert.IsInstanceOf(typeof(short), a.ToInt16()); Assert.AreEqual(5, a.ToInt16()); } [Test] public void TestConvertToInt64() { long val = 5 + (long)int.MaxValue; var a = new PyInt(val); Assert.IsInstanceOf(typeof(long), a.ToInt64()); Assert.AreEqual(val, a.ToInt64()); } [Test] public void ToBigInteger() { int[] simpleValues = { 0, 1, 2, 0x10, 0x79, 0x80, 0x81, 0xFF, 0x123, 0x8000, 0x1234, 0x8001, 0x4000, 0xFF, }; simpleValues = simpleValues.Concat(simpleValues.Select(v => -v)).ToArray(); var expected = simpleValues.Select(v => new BigInteger(v)).ToArray(); var actual = simpleValues.Select(v => new PyInt(v).ToBigInteger()).ToArray(); CollectionAssert.AreEqual(expected, actual); } [Test] public void CompareTo() { var v = new PyInt(42); #region Signed Assert.AreEqual(0, v.CompareTo(42L)); Assert.AreEqual(0, v.CompareTo(42)); Assert.AreEqual(0, v.CompareTo((short)42)); Assert.AreEqual(0, v.CompareTo((sbyte)42)); Assert.AreEqual(1, v.CompareTo(41L)); Assert.AreEqual(1, v.CompareTo(41)); Assert.AreEqual(1, v.CompareTo((short)41)); Assert.AreEqual(1, v.CompareTo((sbyte)41)); Assert.AreEqual(-1, v.CompareTo(43L)); Assert.AreEqual(-1, v.CompareTo(43)); Assert.AreEqual(-1, v.CompareTo((short)43)); Assert.AreEqual(-1, v.CompareTo((sbyte)43)); #endregion Signed #region Unsigned Assert.AreEqual(0, v.CompareTo(42UL)); Assert.AreEqual(0, v.CompareTo(42U)); Assert.AreEqual(0, v.CompareTo((ushort)42)); Assert.AreEqual(0, v.CompareTo((byte)42)); Assert.AreEqual(1, v.CompareTo(41UL)); Assert.AreEqual(1, v.CompareTo(41U)); Assert.AreEqual(1, v.CompareTo((ushort)41)); Assert.AreEqual(1, v.CompareTo((byte)41)); Assert.AreEqual(-1, v.CompareTo(43UL)); Assert.AreEqual(-1, v.CompareTo(43U)); Assert.AreEqual(-1, v.CompareTo((ushort)43)); Assert.AreEqual(-1, v.CompareTo((byte)43)); #endregion Unsigned } [Test] public void Equals() { var v = new PyInt(42); #region Signed Assert.True(v.Equals(42L)); Assert.True(v.Equals(42)); Assert.True(v.Equals((short)42)); Assert.True(v.Equals((sbyte)42)); Assert.False(v.Equals(41L)); Assert.False(v.Equals(41)); Assert.False(v.Equals((short)41)); Assert.False(v.Equals((sbyte)41)); #endregion Signed #region Unsigned Assert.True(v.Equals(42UL)); Assert.True(v.Equals(42U)); Assert.True(v.Equals((ushort)42)); Assert.True(v.Equals((byte)42)); Assert.False(v.Equals(41UL)); Assert.False(v.Equals(41U)); Assert.False(v.Equals((ushort)41)); Assert.False(v.Equals((byte)41)); #endregion Unsigned } [Test] public void ToBigIntegerLarge() { BigInteger val = BigInteger.Pow(2, 1024) + 3; var pyInt = new PyInt(val); Assert.AreEqual(val, pyInt.ToBigInteger()); val = -val; pyInt = new PyInt(val); Assert.AreEqual(val, pyInt.ToBigInteger()); } } }
X Tutup