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

OpRRITest() private method

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

            var InstructionNames = new[] { "addi", "addiu", "andi", "ori", "xori" };
            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}, {3}\n",
                            instructionName,
                            m + ResultOffset,
                            n + InputOffset,
                            (Numbers[m] & 0xFFFF)
                        );
                    }

                    //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(@"
                addi.0: 0,0,1,31073,12241,-1,22136,17185,-1,-2,0,1,
                addi.0: 0,0,1,31073,12241,-1,22136,17185,-1,-2,0,1,
                addi.1: 1,1,2,31074,12242,0,22137,17186,0,-1,1,2,
                addi.-99999: -99999,-99999,-99998,-68926,-87758,-100000,-77863,-82814,-100000,-100001,-99999,-99998,
                addi.77777: 77777,77777,77778,108850,90018,77776,99913,94962,77776,77775,77777,77778,
                addi.-1: -1,-1,0,31072,12240,-2,22135,17184,-2,-3,-1,0,
                addi.305419896: 305419896,305419896,305419897,305450969,305432137,305419895,305442032,305437081,305419895,305419894,305419896,305419897,
                addi.-2023406815: -2023406815,-2023406815,-2023406814,-2023375742,-2023394574,-2023406816,-2023384679,-2023389630,-2023406816,-2023406817,-2023406815,-2023406814,
                addi.2147483647: 2147483647,2147483647,-2147483648,-2147452576,-2147471408,2147483646,-2147461513,-2147466464,2147483646,2147483645,2147483647,-2147483648,
                addi.2147483646: 2147483646,2147483646,2147483647,-2147452577,-2147471409,2147483645,-2147461514,-2147466465,2147483645,2147483644,2147483646,2147483647,
                addi.-2147483648: -2147483648,-2147483648,-2147483647,-2147452575,-2147471407,2147483647,-2147461512,-2147466463,2147483647,2147483646,-2147483648,-2147483647,
                addi.-2147483647: -2147483647,-2147483647,-2147483646,-2147452574,-2147471406,-2147483648,-2147461511,-2147466462,-2147483648,2147483647,-2147483647,-2147483646,
                addiu.0: 0,0,1,31073,12241,-1,22136,17185,-1,-2,0,1,
                addiu.0: 0,0,1,31073,12241,-1,22136,17185,-1,-2,0,1,
                addiu.1: 1,1,2,31074,12242,0,22137,17186,0,-1,1,2,
                addiu.-99999: -99999,-99999,-99998,-68926,-87758,-100000,-77863,-82814,-100000,-100001,-99999,-99998,
                addiu.77777: 77777,77777,77778,108850,90018,77776,99913,94962,77776,77775,77777,77778,
                addiu.-1: -1,-1,0,31072,12240,-2,22135,17184,-2,-3,-1,0,
                addiu.305419896: 305419896,305419896,305419897,305450969,305432137,305419895,305442032,305437081,305419895,305419894,305419896,305419897,
                addiu.-2023406815: -2023406815,-2023406815,-2023406814,-2023375742,-2023394574,-2023406816,-2023384679,-2023389630,-2023406816,-2023406817,-2023406815,-2023406814,
                addiu.2147483647: 2147483647,2147483647,-2147483648,-2147452576,-2147471408,2147483646,-2147461513,-2147466464,2147483646,2147483645,2147483647,-2147483648,
                addiu.2147483646: 2147483646,2147483646,2147483647,-2147452577,-2147471409,2147483645,-2147461514,-2147466465,2147483645,2147483644,2147483646,2147483647,
                addiu.-2147483648: -2147483648,-2147483648,-2147483647,-2147452575,-2147471407,2147483647,-2147461512,-2147466463,2147483647,2147483646,-2147483648,-2147483647,
                addiu.-2147483647: -2147483647,-2147483647,-2147483646,-2147452574,-2147471406,-2147483648,-2147461511,-2147466462,-2147483648,2147483647,-2147483647,-2147483646,
                andi.0: 0,0,0,0,0,0,0,0,0,0,0,0,
                andi.0: 0,0,0,0,0,0,0,0,0,0,0,0,
                andi.1: 0,0,1,1,1,1,0,1,1,0,0,1,
                andi.-99999: 0,0,1,31073,10561,31073,20576,16673,31073,31072,0,1,
                andi.77777: 0,0,1,10561,12241,12241,1616,769,12241,12240,0,1,
                andi.-1: 0,0,1,31073,12241,65535,22136,17185,65535,65534,0,1,
                andi.305419896: 0,0,0,20576,1616,22136,22136,16928,22136,22136,0,0,
                andi.-2023406815: 0,0,1,16673,769,17185,16928,17185,17185,17184,0,1,
                andi.2147483647: 0,0,1,31073,12241,65535,22136,17185,65535,65534,0,1,
                andi.2147483646: 0,0,0,31072,12240,65534,22136,17184,65534,65534,0,0,
                andi.-2147483648: 0,0,0,0,0,0,0,0,0,0,0,0,
                andi.-2147483647: 0,0,1,1,1,1,0,1,1,0,0,1,
                ori.0: 0,0,1,31073,12241,65535,22136,17185,65535,65534,0,1,
                ori.0: 0,0,1,31073,12241,65535,22136,17185,65535,65534,0,1,
                ori.1: 1,1,1,31073,12241,65535,22137,17185,65535,65535,1,1,
                ori.-99999: -99999,-99999,-99999,-99999,-98319,-65537,-98439,-99487,-65537,-65537,-99999,-99999,
                ori.77777: 77777,77777,77777,98289,77777,131071,98297,94193,131071,131071,77777,77777,
                ori.-1: -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
                ori.305419896: 305419896,305419896,305419897,305430393,305430521,305463295,305419896,305420153,305463295,305463294,305419896,305419897,
                ori.-2023406815: -2023406815,-2023406815,-2023406815,-2023392415,-2023395343,-2023358465,-2023401607,-2023406815,-2023358465,-2023358465,-2023406815,-2023406815,
                ori.2147483647: 2147483647,2147483647,2147483647,2147483647,2147483647,2147483647,2147483647,2147483647,2147483647,2147483647,2147483647,2147483647,
                ori.2147483646: 2147483646,2147483646,2147483647,2147483647,2147483647,2147483647,2147483646,2147483647,2147483647,2147483646,2147483646,2147483647,
                ori.-2147483648: -2147483648,-2147483648,-2147483647,-2147452575,-2147471407,-2147418113,-2147461512,-2147466463,-2147418113,-2147418114,-2147483648,-2147483647,
                ori.-2147483647: -2147483647,-2147483647,-2147483647,-2147452575,-2147471407,-2147418113,-2147461511,-2147466463,-2147418113,-2147418113,-2147483647,-2147483647,
                xori.0: 0,0,1,31073,12241,65535,22136,17185,65535,65534,0,1,
                xori.0: 0,0,1,31073,12241,65535,22136,17185,65535,65534,0,1,
                xori.1: 1,1,0,31072,12240,65534,22137,17184,65534,65535,1,0,
                xori.-99999: -99999,-99999,-100000,-131072,-108880,-96610,-119015,-116160,-96610,-96609,-99999,-100000,
                xori.77777: 77777,77777,77776,87728,65536,118830,96681,93424,118830,118831,77777,77776,
                xori.-1: -1,-1,-2,-31074,-12242,-65536,-22137,-17186,-65536,-65535,-1,-2,
                xori.305419896: 305419896,305419896,305419897,305409817,305428905,305441159,305397760,305403225,305441159,305441158,305419896,305419897,
                xori.-2023406815: -2023406815,-2023406815,-2023406816,-2023409088,-2023396112,-2023375650,-2023418535,-2023424000,-2023375650,-2023375649,-2023406815,-2023406816,
                xori.2147483647: 2147483647,2147483647,2147483646,2147452574,2147471406,2147418112,2147461511,2147466462,2147418112,2147418113,2147483647,2147483646,
                xori.2147483646: 2147483646,2147483646,2147483647,2147452575,2147471407,2147418113,2147461510,2147466463,2147418113,2147418112,2147483646,2147483647,
                xori.-2147483648: -2147483648,-2147483648,-2147483647,-2147452575,-2147471407,-2147418113,-2147461512,-2147466463,-2147418113,-2147418114,-2147483648,-2147483647,
                xori.-2147483647: -2147483647,-2147483647,-2147483648,-2147452576,-2147471408,-2147418114,-2147461511,-2147466464,-2147418114,-2147418113,-2147483647,-2147483648,
            "));

            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);
                }
            }
        }