예제 #1
0
        static void Test()
        {
            //Init test
            var a  = new BigInt();
            var b  = new BigInt("+10");
            var b1 = new BigInt("010");
            var c  = new BigInt('-', new List <int>()
            {
                1, 2, 3, 4, 5
            });

            if (a.sign != '+' || !Enumerable.SequenceEqual(a.number, new List <int> {
                0
            }))
            {
                Console.WriteLine("Init 1 failed");
            }
            if (b.sign != '+' || !Enumerable.SequenceEqual(b.number, new List <int> {
                1, 0
            }))
            {
                Console.WriteLine("Init 2.1 failed");
            }
            if (b1.sign != '+' || !Enumerable.SequenceEqual(b1.number, new List <int> {
                1, 0
            }))
            {
                Console.WriteLine("Init 2.2 failed");
            }
            if (c.sign != '-' || !Enumerable.SequenceEqual(c.number, new List <int> {
                1, 2, 3, 4, 5
            }))
            {
                Console.WriteLine("Init 3 failed");
            }

            //+ - Test
            var d = new BigInt("+12345678");
            var e = new BigInt("+8765432");
            var f = new BigInt("-12345");

            var t1 = d + e; //21111110
            var t2 = d - e; //3580246
            var t3 = d + f; //12333333
            var t4 = d - f; //12358023
            var t5 = e - d; //-3580246
            var t6 = e - f; //8777777
            var t7 = f - e; //-8777777


            if (t1.sign != '+' || !Enumerable.SequenceEqual(t1.number, new List <int> {
                2, 1, 1, 1, 1, 1, 1, 0
            }))
            {
                Console.WriteLine("+ - 1 failed");
            }
            if (t2.sign != '+' || !Enumerable.SequenceEqual(t2.number, new List <int> {
                3, 5, 8, 0, 2, 4, 6
            }))
            {
                Console.WriteLine("+ - 2 failed");
            }
            if (t3.sign != '+' || !Enumerable.SequenceEqual(t3.number, new List <int> {
                1, 2, 3, 3, 3, 3, 3, 3
            }))
            {
                Console.WriteLine("+ - 3 failed");
            }
            if (t4.sign != '+' || !Enumerable.SequenceEqual(t4.number, new List <int> {
                1, 2, 3, 5, 8, 0, 2, 3
            }))
            {
                Console.WriteLine("+ - 4 failed");
            }
            if (t5.sign != '-' || !Enumerable.SequenceEqual(t5.number, new List <int> {
                3, 5, 8, 0, 2, 4, 6
            }))
            {
                Console.WriteLine("+ - 5 failed");
            }
            if (t6.sign != '+' || !Enumerable.SequenceEqual(t6.number, new List <int> {
                8, 7, 7, 7, 7, 7, 7
            }))
            {
                Console.WriteLine("+ - 6 failed");
            }
            if (t7.sign != '-' || !Enumerable.SequenceEqual(t7.number, new List <int> {
                8, 7, 7, 7, 7, 7, 7
            }))
            {
                Console.WriteLine("+ - 7 failed");
            }

            // * / % Test
            var g  = new BigInt("+987654321");
            var h  = new BigInt("+123456");
            var i  = new BigInt("-987654");
            var j  = new BigInt("100000");
            var g1 = new BigInt("28");
            var j1 = new BigInt("4");

            var t8  = g * h;   //121931851853376
            var t9  = g * i;   //-975460740752934
            var t10 = g * j;   //98765432100000
            var t11 = g / h;   //8000
            var t12 = g % h;   //6321
            var t13 = h % g;   //123456
            var t14 = g / j;   //9876
            var t15 = g % j;   //54321
            var t16 = g1 % j1; //0

            if (t8.sign != '+' || !Enumerable.SequenceEqual(t8.number, new List <int> {
                1, 2, 1, 9, 3, 1, 8, 5, 1, 8, 5, 3, 3, 7, 6
            }))
            {
                Console.WriteLine("* / % 1 failed");
            }
            if (t9.sign != '-' || !Enumerable.SequenceEqual(t9.number, new List <int> {
                9, 7, 5, 4, 6, 0, 7, 4, 0, 7, 5, 2, 9, 3, 4
            }))
            {
                Console.WriteLine("* / % 2 failed");
            }
            if (t10.sign != '+' || !Enumerable.SequenceEqual(t10.number, new List <int> {
                9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 0, 0, 0, 0
            }))
            {
                Console.WriteLine("* / % 3 failed");
            }
            if (t11.sign != '+' || !Enumerable.SequenceEqual(t11.number, new List <int> {
                8, 0, 0, 0
            }))
            {
                Console.WriteLine("* / % 4 failed");
            }
            if (t12.sign != '+' || !Enumerable.SequenceEqual(t12.number, new List <int> {
                6, 3, 2, 1
            }))
            {
                Console.WriteLine("* / % 5 failed");
            }
            if (t13.sign != '+' || !Enumerable.SequenceEqual(t13.number, new List <int> {
                1, 2, 3, 4, 5, 6
            }))
            {
                Console.WriteLine("* / % 6 failed");
            }
            if (t14.sign != '+' || !Enumerable.SequenceEqual(t14.number, new List <int> {
                9, 8, 7, 6
            }))
            {
                Console.WriteLine("* / % 7 failed");
            }
            if (t15.sign != '+' || !Enumerable.SequenceEqual(t15.number, new List <int> {
                5, 4, 3, 2, 1
            }))
            {
                Console.WriteLine("* / % 8 failed");
            }
            if (t16.sign != '+' || !Enumerable.SequenceEqual(t16.number, new List <int> {
                0
            }))
            {
                Console.WriteLine("* / % 9 failed");
            }

            //Compare Test
            if (!(g > h))
            {
                Console.WriteLine("Compare 1 failed");
            }
            if (!(h < g))
            {
                Console.WriteLine("Compare 2 failed");
            }
            if (!(g != h))
            {
                Console.WriteLine("Compare 3 failed");
            }
            if (!(g == new BigInt("+987654321")))
            {
                Console.WriteLine("Compare 4 failed");
            }
            if (!(g >= i))
            {
                Console.WriteLine("Compare 5 failed");
            }
            if (!(i <= g))
            {
                Console.WriteLine("Compare 6 failed");
            }

            //Mod Inverse Test
            var k = new BigInt("3");
            var l = new BigInt("26");
            var m = new BigInt("5");
            var n = new BigInt("12");

            var t17 = BigInt.FindModInverse(k, l); //9
            var t18 = BigInt.FindModInverse(m, n); //5

            if (t17 != new BigInt("9"))
            {
                Console.WriteLine("Mod Inverse 1 failed");
            }
            if (t18 != new BigInt("5"))
            {
                Console.WriteLine("Mod Inverse 2 failed");
            }


            //RSA TEST
            var o = new BigInt("13");
            var p = new BigInt("7");

            var t19 = new RSA(o, p, "text");

            if (t19.GetAnswer() != "TEXT")
            {
                Console.WriteLine("RSA TEST 1 failed");
            }

            //IsSimple TEST
            var q = new BigInt("26");
            var r = new BigInt("59");
            var s = new BigInt("103");
            var t = new BigInt("200");

            if (q.IsNumSimple())
            {
                Console.WriteLine("IsSimple TEST 1 failed");
            }
            if (!r.IsNumSimple())
            {
                Console.WriteLine("IsSimple TEST 1 failed");
            }
            if (!s.IsNumSimple())
            {
                Console.WriteLine("IsSimple TEST 1 failed");
            }
            if (t.IsNumSimple())
            {
                Console.WriteLine("IsSimple TEST 1 failed");
            }
        }