コード例 #1
0
        public void TestSimpleArithmetic()
        {
            for (var i = -100; i <= 100; ++i)
            {
                var x = GT.FromInt(i);
                Assert.AreEqual(GT.FromInt(-i), -x);
                for (var j = -100; j <= 100; ++j)
                {
                    var y = GT.FromInt(j);
                    Assert.AreEqual(GT.FromInt(i + j), x + y);
                    Assert.AreEqual(GT.FromInt(i * j), x * y);
                    Assert.AreEqual(GT.FromInt(i - j), x - y);
                    if (j == 0)
                    {
                        Assert.Throws <InvalidOperationException>(() =>
                        {
                            var unused = x * y / y;
                        });
                    }
                    else
                    {
                        Assert.AreEqual(GT.FromInt(i * j / j), x * y / y);
                    }

                    if (j > 0 && i >= -8 && i <= 8 && j <= 8)
                    {
                        Assert.AreEqual(GT.FromInt((int)Math.Pow(i, j)), GT.Pow(x, Fr.FromInt(j)));
                    }
                }
            }
        }
コード例 #2
0
        public void TestZero()
        {
            var rndGen = new Random(1337);

            Assert.IsTrue(GT.Zero.IsZero());
            Assert.IsFalse(GT.Zero.IsOne());
            Assert.AreEqual(GT.Zero, GT.Zero);
            Assert.AreEqual(GT.Zero, GT.FromInt(0));
            Assert.AreNotEqual(GT.Zero, GT.One);
            Assert.IsTrue(GT.Zero != GT.One);
            Assert.AreEqual(GT.Zero + GT.Zero, GT.Zero);
            var rnd = GT.One * GT.FromInt(rndGen.Next());

            Assert.AreEqual(GT.Zero + rnd, rnd);
            Assert.AreEqual(rnd + GT.Zero, rnd);
            Assert.AreEqual(GT.Zero * rnd, GT.Zero);
            Assert.AreEqual(rnd * GT.Zero, GT.Zero);
            Assert.AreEqual(GT.Zero, GT.Zero.Inverse()); // NB
            rnd.Clear();
            Assert.AreEqual(GT.Zero, rnd);
            Console.WriteLine(GT.Zero.ToString());
            Console.WriteLine(GT.One.ToString());
            Assert.AreEqual(
                $"GT({new string('0', 1152)})",
                GT.Zero.ToString()
                );
            Assert.AreNotEqual(GT.Zero, Fr.Zero);
        }
コード例 #3
0
        public void SerializationRoundTrip()
        {
            var rndGen     = new Random(1337);
            var x          = GT.FromInt(rndGen.Next());
            var serialized = x.ToBytes();

            Assert.AreEqual(serialized.Length, 576);
            var restored = GT.FromBytes(serialized);

            Assert.AreEqual(x, restored);
        }
コード例 #4
0
        public void TestOne()
        {
            var rndGen = new Random(1337);

            Assert.IsFalse(GT.One.IsZero());
            Assert.IsTrue(GT.One.IsOne());
            Assert.AreEqual(GT.One, GT.One);
            Assert.AreNotEqual(GT.Zero, GT.One);
            Assert.IsTrue(GT.Zero != GT.One);
            Assert.AreEqual(GT.One - GT.One, GT.Zero);
            var rnd = GT.One * GT.FromInt(rndGen.Next());

            Assert.AreEqual(GT.One * rnd, rnd);
            Assert.AreEqual(rnd * GT.One, rnd);
            Assert.AreEqual(rnd / GT.One, rnd);
            Assert.AreEqual(GT.One, GT.One.Inverse());
            Assert.AreEqual(
                $"GT(01{new string('0', 1150)})",
                GT.One.ToString()
                );
            Assert.AreNotEqual(GT.One, Fr.One);
        }