CSPspEmu.Core.Tests.CpuEmitterTest.OpRRRTest C# (CSharp) Method

OpRRRTest() private method

private OpRRRTest ( ) : void
return void
        public void OpRRRTest()
        {
            var Results = new Queue<int>();

            var InstructionNames = new[] { "add", "addu", "sub", "subu", "and", "or", "xor", "nor" };
            var Numbers = new int[] { 0, 0, 1, -99999, 77777, -1, 0x12345678, unchecked((int)0x87654321), int.MaxValue, int.MaxValue - 1, int.MinValue, int.MinValue + 1 };
            int ResultOffset = 17;
            int InputOffset = 0;

            foreach (var instructionName in InstructionNames)
            {
                for (int n = 0; n < Numbers.Length; n++)
                {
                    string Assembly = "";

                    for (int m = 0; m < Numbers.Length; m++)
                    {
                        CpuThreadState.GPR[InputOffset + m] = Numbers[m];

                        Assembly += String.Format(
                            "{0} r{1}, r{2}, r{3}\n",
                            instructionName,
                            m + ResultOffset,
                            n + InputOffset,
                            m + InputOffset
                        );
                    }

                    //Console.WriteLine("{0}", Assembly);

                    ExecuteAssembly(Assembly);

                    for (int m = 0; m < Numbers.Length; m++)
                    {
                        Results.Enqueue(CpuThreadState.GPR[m + ResultOffset]);
                    }
                }
            }

            var ExpectedLines = new Queue<string>(stringToLines(@"
                add.0: 0,0,1,-99999,77777,-1,305419896,-2023406815,2147483647,2147483646,-2147483648,-2147483647,
                add.0: 0,0,1,-99999,77777,-1,305419896,-2023406815,2147483647,2147483646,-2147483648,-2147483647,
                add.1: 1,1,2,-99998,77778,0,305419897,-2023406814,-2147483648,2147483647,-2147483647,-2147483646,
                add.-99999: -99999,-99999,-99998,-199998,-22222,-100000,305319897,-2023506814,2147383648,2147383647,2147383649,2147383650,
                add.77777: 77777,77777,77778,-22222,155554,77776,305497673,-2023329038,-2147405872,-2147405873,-2147405871,-2147405870,
                add.-1: -1,-1,0,-100000,77776,-2,305419895,-2023406816,2147483646,2147483645,2147483647,-2147483648,
                add.305419896: 305419896,305419896,305419897,305319897,305497673,305419895,610839792,-1717986919,-1842063753,-1842063754,-1842063752,-1842063751,
                add.-2023406815: -2023406815,-2023406815,-2023406814,-2023506814,-2023329038,-2023406816,-1717986919,248153666,124076832,124076831,124076833,124076834,
                add.2147483647: 2147483647,2147483647,-2147483648,2147383648,-2147405872,2147483646,-1842063753,124076832,-2,-3,-1,0,
                add.2147483646: 2147483646,2147483646,2147483647,2147383647,-2147405873,2147483645,-1842063754,124076831,-3,-4,-2,-1,
                add.-2147483648: -2147483648,-2147483648,-2147483647,2147383649,-2147405871,2147483647,-1842063752,124076833,-1,-2,0,1,
                add.-2147483647: -2147483647,-2147483647,-2147483646,2147383650,-2147405870,-2147483648,-1842063751,124076834,0,-1,1,2,
                addu.0: 0,0,1,-99999,77777,-1,305419896,-2023406815,2147483647,2147483646,-2147483648,-2147483647,
                addu.0: 0,0,1,-99999,77777,-1,305419896,-2023406815,2147483647,2147483646,-2147483648,-2147483647,
                addu.1: 1,1,2,-99998,77778,0,305419897,-2023406814,-2147483648,2147483647,-2147483647,-2147483646,
                addu.-99999: -99999,-99999,-99998,-199998,-22222,-100000,305319897,-2023506814,2147383648,2147383647,2147383649,2147383650,
                addu.77777: 77777,77777,77778,-22222,155554,77776,305497673,-2023329038,-2147405872,-2147405873,-2147405871,-2147405870,
                addu.-1: -1,-1,0,-100000,77776,-2,305419895,-2023406816,2147483646,2147483645,2147483647,-2147483648,
                addu.305419896: 305419896,305419896,305419897,305319897,305497673,305419895,610839792,-1717986919,-1842063753,-1842063754,-1842063752,-1842063751,
                addu.-2023406815: -2023406815,-2023406815,-2023406814,-2023506814,-2023329038,-2023406816,-1717986919,248153666,124076832,124076831,124076833,124076834,
                addu.2147483647: 2147483647,2147483647,-2147483648,2147383648,-2147405872,2147483646,-1842063753,124076832,-2,-3,-1,0,
                addu.2147483646: 2147483646,2147483646,2147483647,2147383647,-2147405873,2147483645,-1842063754,124076831,-3,-4,-2,-1,
                addu.-2147483648: -2147483648,-2147483648,-2147483647,2147383649,-2147405871,2147483647,-1842063752,124076833,-1,-2,0,1,
                addu.-2147483647: -2147483647,-2147483647,-2147483646,2147383650,-2147405870,-2147483648,-1842063751,124076834,0,-1,1,2,
                sub.0: 0,0,-1,99999,-77777,1,-305419896,2023406815,-2147483647,-2147483646,-2147483648,2147483647,
                sub.0: 0,0,-1,99999,-77777,1,-305419896,2023406815,-2147483647,-2147483646,-2147483648,2147483647,
                sub.1: 1,1,0,100000,-77776,2,-305419895,2023406816,-2147483646,-2147483645,-2147483647,-2147483648,
                sub.-99999: -99999,-99999,-100000,0,-177776,-99998,-305519895,2023306816,2147383650,2147383651,2147383649,2147383648,
                sub.77777: 77777,77777,77776,177776,0,77778,-305342119,2023484592,-2147405870,-2147405869,-2147405871,-2147405872,
                sub.-1: -1,-1,-2,99998,-77778,0,-305419897,2023406814,-2147483648,-2147483647,2147483647,2147483646,
                sub.305419896: 305419896,305419896,305419895,305519895,305342119,305419897,0,-1966140585,-1842063751,-1842063750,-1842063752,-1842063753,
                sub.-2023406815: -2023406815,-2023406815,-2023406816,-2023306816,-2023484592,-2023406814,1966140585,0,124076834,124076835,124076833,124076832,
                sub.2147483647: 2147483647,2147483647,2147483646,-2147383650,2147405870,-2147483648,1842063751,-124076834,0,1,-1,-2,
                sub.2147483646: 2147483646,2147483646,2147483645,-2147383651,2147405869,2147483647,1842063750,-124076835,-1,0,-2,-3,
                sub.-2147483648: -2147483648,-2147483648,2147483647,-2147383649,2147405871,-2147483647,1842063752,-124076833,1,2,0,-1,
                sub.-2147483647: -2147483647,-2147483647,-2147483648,-2147383648,2147405872,-2147483646,1842063753,-124076832,2,3,1,0,
                subu.0: 0,0,-1,99999,-77777,1,-305419896,2023406815,-2147483647,-2147483646,-2147483648,2147483647,
                subu.0: 0,0,-1,99999,-77777,1,-305419896,2023406815,-2147483647,-2147483646,-2147483648,2147483647,
                subu.1: 1,1,0,100000,-77776,2,-305419895,2023406816,-2147483646,-2147483645,-2147483647,-2147483648,
                subu.-99999: -99999,-99999,-100000,0,-177776,-99998,-305519895,2023306816,2147383650,2147383651,2147383649,2147383648,
                subu.77777: 77777,77777,77776,177776,0,77778,-305342119,2023484592,-2147405870,-2147405869,-2147405871,-2147405872,
                subu.-1: -1,-1,-2,99998,-77778,0,-305419897,2023406814,-2147483648,-2147483647,2147483647,2147483646,
                subu.305419896: 305419896,305419896,305419895,305519895,305342119,305419897,0,-1966140585,-1842063751,-1842063750,-1842063752,-1842063753,
                subu.-2023406815: -2023406815,-2023406815,-2023406816,-2023306816,-2023484592,-2023406814,1966140585,0,124076834,124076835,124076833,124076832,
                subu.2147483647: 2147483647,2147483647,2147483646,-2147383650,2147405870,-2147483648,1842063751,-124076834,0,1,-1,-2,
                subu.2147483646: 2147483646,2147483646,2147483645,-2147383651,2147405869,2147483647,1842063750,-124076835,-1,0,-2,-3,
                subu.-2147483648: -2147483648,-2147483648,2147483647,-2147383649,2147405871,-2147483647,1842063752,-124076833,1,2,0,-1,
                subu.-2147483647: -2147483647,-2147483647,-2147483648,-2147383648,2147405872,-2147483646,1842063753,-124076832,2,3,1,0,
                and.0: 0,0,0,0,0,0,0,0,0,0,0,0,
                and.0: 0,0,0,0,0,0,0,0,0,0,0,0,
                and.1: 0,0,1,1,1,1,0,1,1,0,0,1,
                and.-99999: 0,0,1,-99999,10561,-99999,305418336,-2023472863,2147383649,2147383648,-2147483648,-2147483647,
                and.77777: 0,0,1,10561,77777,77777,1616,66305,77777,77776,0,1,
                and.-1: 0,0,1,-99999,77777,-1,305419896,-2023406815,2147483647,2147483646,-2147483648,-2147483647,
                and.305419896: 0,0,0,305418336,1616,305419896,305419896,35930656,305419896,305419896,0,0,
                and.-2023406815: 0,0,1,-2023472863,66305,-2023406815,35930656,-2023406815,124076833,124076832,-2147483648,-2147483647,
                and.2147483647: 0,0,1,2147383649,77777,2147483647,305419896,124076833,2147483647,2147483646,0,1,
                and.2147483646: 0,0,0,2147383648,77776,2147483646,305419896,124076832,2147483646,2147483646,0,0,
                and.-2147483648: 0,0,0,-2147483648,0,-2147483648,0,-2147483648,0,0,-2147483648,-2147483648,
                and.-2147483647: 0,0,1,-2147483647,1,-2147483647,0,-2147483647,1,0,-2147483648,-2147483647,
                or.0: 0,0,1,-99999,77777,-1,305419896,-2023406815,2147483647,2147483646,-2147483648,-2147483647,
                or.0: 0,0,1,-99999,77777,-1,305419896,-2023406815,2147483647,2147483646,-2147483648,-2147483647,
                or.1: 1,1,1,-99999,77777,-1,305419897,-2023406815,2147483647,2147483647,-2147483647,-2147483647,
                or.-99999: -99999,-99999,-99999,-99999,-32783,-1,-98439,-33951,-1,-1,-99999,-99999,
                or.77777: 77777,77777,77777,-32783,77777,-1,305496057,-2023395343,2147483647,2147483647,-2147405871,-2147405871,
                or.-1: -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
                or.305419896: 305419896,305419896,305419897,-98439,305496057,-1,305419896,-1753917575,2147483647,2147483646,-1842063752,-1842063751,
                or.-2023406815: -2023406815,-2023406815,-2023406815,-33951,-2023395343,-1,-1753917575,-2023406815,-1,-1,-2023406815,-2023406815,
                or.2147483647: 2147483647,2147483647,2147483647,-1,2147483647,-1,2147483647,-1,2147483647,2147483647,-1,-1,
                or.2147483646: 2147483646,2147483646,2147483647,-1,2147483647,-1,2147483646,-1,2147483647,2147483646,-2,-1,
                or.-2147483648: -2147483648,-2147483648,-2147483647,-99999,-2147405871,-1,-1842063752,-2023406815,-1,-2,-2147483648,-2147483647,
                or.-2147483647: -2147483647,-2147483647,-2147483647,-99999,-2147405871,-1,-1842063751,-2023406815,-1,-1,-2147483647,-2147483647,
                xor.0: 0,0,1,-99999,77777,-1,305419896,-2023406815,2147483647,2147483646,-2147483648,-2147483647,
                xor.0: 0,0,1,-99999,77777,-1,305419896,-2023406815,2147483647,2147483646,-2147483648,-2147483647,
                xor.1: 1,1,0,-100000,77776,-2,305419897,-2023406816,2147483646,2147483647,-2147483647,-2147483648,
                xor.-99999: -99999,-99999,-100000,0,-43344,99998,-305516775,2023438912,-2147383650,-2147383649,2147383649,2147383648,
                xor.77777: 77777,77777,77776,-43344,0,-77778,305494441,-2023461648,2147405870,2147405871,-2147405871,-2147405872,
                xor.-1: -1,-1,-2,99998,-77778,0,-305419897,2023406814,-2147483648,-2147483647,2147483647,2147483646,
                xor.305419896: 305419896,305419896,305419897,-305516775,305494441,-305419897,0,-1789848231,1842063751,1842063750,-1842063752,-1842063751,
                xor.-2023406815: -2023406815,-2023406815,-2023406816,2023438912,-2023461648,2023406814,-1789848231,0,-124076834,-124076833,124076833,124076832,
                xor.2147483647: 2147483647,2147483647,2147483646,-2147383650,2147405870,-2147483648,1842063751,-124076834,0,1,-1,-2,
                xor.2147483646: 2147483646,2147483646,2147483647,-2147383649,2147405871,-2147483647,1842063750,-124076833,1,0,-2,-1,
                xor.-2147483648: -2147483648,-2147483648,-2147483647,2147383649,-2147405871,2147483647,-1842063752,124076833,-1,-2,0,1,
                xor.-2147483647: -2147483647,-2147483647,-2147483648,2147383648,-2147405872,2147483646,-1842063751,124076832,-2,-1,1,0,
                nor.0: -1,-1,-2,99998,-77778,0,-305419897,2023406814,-2147483648,-2147483647,2147483647,2147483646,
                nor.0: -1,-1,-2,99998,-77778,0,-305419897,2023406814,-2147483648,-2147483647,2147483647,2147483646,
                nor.1: -2,-2,-2,99998,-77778,0,-305419898,2023406814,-2147483648,-2147483648,2147483646,2147483646,
                nor.-99999: 99998,99998,99998,99998,32782,0,98438,33950,0,0,99998,99998,
                nor.77777: -77778,-77778,-77778,32782,-77778,0,-305496058,2023395342,-2147483648,-2147483648,2147405870,2147405870,
                nor.-1: 0,0,0,0,0,0,0,0,0,0,0,0,
                nor.305419896: -305419897,-305419897,-305419898,98438,-305496058,0,-305419897,1753917574,-2147483648,-2147483647,1842063751,1842063750,
                nor.-2023406815: 2023406814,2023406814,2023406814,33950,2023395342,0,1753917574,2023406814,0,0,2023406814,2023406814,
                nor.2147483647: -2147483648,-2147483648,-2147483648,0,-2147483648,0,-2147483648,0,-2147483648,-2147483648,0,0,
                nor.2147483646: -2147483647,-2147483647,-2147483648,0,-2147483648,0,-2147483647,0,-2147483648,-2147483647,1,0,
                nor.-2147483648: 2147483647,2147483647,2147483646,99998,2147405870,0,1842063751,2023406814,0,1,2147483647,2147483646,
                nor.-2147483647: 2147483646,2147483646,2147483646,99998,2147405870,0,1842063750,2023406814,0,0,2147483646,2147483646,
            "));

            foreach (var instructionName in InstructionNames)
            {
                foreach (var LeftNumber in Numbers)
                {
                    var Line = String.Format("{0}.{1}: ", instructionName, LeftNumber);
                    foreach (var RightNumber in Numbers)
                    {
                        Line += String.Format("{0},", Results.Dequeue());
                    }
                    Console.WriteLine(Line);
                    //Assert.AreEqual(ExpectedLines.Dequeue(), Line);
                }
            }
        }