예제 #1
0
파일: Test.cs 프로젝트: Ribtoks/LongInt
        public void TestBinaryDecimalCast()
        {
            SLongIntB A = new SLongIntB("-20976982698769825692774362798672976276668754000000000000000765700000000");
            SLongIntD B = (SLongIntD)A;

            Assert.AreEqual(A.ToString(), B.ToString());
            Assert.AreEqual((SLongIntD)A, B);
            Assert.AreEqual(A, (SLongIntB)B);
        }
예제 #2
0
파일: Test.cs 프로젝트: Ribtoks/LongInt
        public void TestSubstraction1()
        {
            SLongIntB N = new SLongIntB("2945729752935981200000005151659293467923476293623");
            RandomLong rand = new RandomLong((ulong)DateTime.Now.Millisecond);

            for (int i = 0; i < 1000; ++i)
            {
                SLongIntB A = new SLongIntB(rand.Next(N), ConstructorMode.Assign);
                SLongIntB B = new SLongIntB(rand.Next(N), ConstructorMode.Assign);

                SLongIntB C = A + B;

                Assert.AreEqual(C - B, A, C.ToString() + " " + B.ToString());
                Assert.AreEqual(C - A, B, C.ToString() + " " + A.ToString());

                Assert.AreEqual(C - 0, C);
                Assert.AreEqual(C - C, (SLongIntB)0);
            }
        }
예제 #3
0
파일: Test.cs 프로젝트: Ribtoks/LongInt
        //[Test()]
        public void TestExtendedGCD()
        {
            SLongIntB N = new SLongIntB("2945729752935981200000005151659293467923476293623");
            RandomLong rand = new RandomLong((ulong)DateTime.Now.Millisecond);

            SLongIntB U = null, V = null;

            for (int i = 0; i < 1000; ++i)
            {
                SLongIntB temp1 = new SLongIntB(rand.Next(N), ConstructorMode.Assign);
                SLongIntB temp2 = new SLongIntB(rand.Next(N), ConstructorMode.Assign);

                SLongIntB gcd = CryptoMath.eXtendedGCD(temp1, temp2, out U, out V);
                SLongIntB gcdB = CryptoMath.GCD(temp1, temp2);

                Assert.AreEqual(gcd, temp1*U + temp2*V);
                Assert.AreEqual(gcd, gcdB, temp1.ToString() + " " + temp2.ToString() + " " + gcd.ToString() + " " + gcdB.ToString());
            }
        }
예제 #4
0
파일: Test.cs 프로젝트: Ribtoks/LongInt
        public void TestPower()
        {
            SLongIntB N = new SLongIntB("2945");
            RandomLong rand = new RandomLong((ulong)DateTime.Now.Millisecond);
            Random rand32 = new Random(DateTime.Now.Millisecond);

            SLongIntB m = new SLongIntB("98696766574783");

            for (int i = 0; i < 100; ++i)
            {
                SLongIntB temp = new SLongIntB(rand.Next(N), ConstructorMode.Assign);
                int power = rand32.Next(ushort.MaxValue) % 10000;

                Assert.AreEqual(CryptoMath.ExpMod5((ULongIntB)temp, (ULongIntB)power, (ULongIntB)m), LongMath.Exp((ULongIntB)temp, (ulong)power) % (ULongIntB)m,
                                temp.ToString() + "^" + power.ToString());
            }
        }
예제 #5
0
파일: Test.cs 프로젝트: Ribtoks/LongInt
        public void TestDivision2()
        {
            SLongIntB N = new SLongIntB("2945729752935981200000005151659293467923476293623");
            RandomLong rand = new RandomLong((ulong)DateTime.Now.Millisecond);

            for (int i = 0; i < 1000; ++i)
            {
                SLongIntB A = new SLongIntB(rand.Next(N), ConstructorMode.Assign);
                SLongIntB B = new SLongIntB(rand.Next(N), ConstructorMode.Assign);

                if (B == 0)
                    continue;

                if ((B * (A / B)) + (A % B) != A)
                {
                    Console.WriteLine(A);
                    Console.WriteLine(B);

                    Console.WriteLine((A/B).ToString());
                    Console.WriteLine((A%B).ToString());
                }

                Assert.AreEqual((B * (A / B)) + (A % B), A, string.Join(" ",
                        new string[]{ A.ToString(), B.ToString(), (A/B).ToString(), (A%B).ToString() }));
            }
        }