コード例 #1
0
ファイル: Console.cs プロジェクト: DualBrain/Emu-o-Tron
        public void RunTest()
        {
            output.Append(@"{\rtf1\ansi {\colortbl ;\red255\green255\blue255;\red0\green200\blue0;\red200\green0\blue0;}");
            output.Append(@"\cf1Running " + testSuite.name + @":\par");
            foreach (Test test in testSuite.tests)
            {
                output.Append(@"\cf1" + test.name + ": ");
                testCore = new NESCore(SystemType.NTSC, Path.Combine(testSuite.basepath, test.file), "", 44100);
                testCore.SetControllers(ControllerType.Controller, ControllerType.Controller, ControllerType.Empty, false, false);
                int frame = 0;
                if (test.type == TestType.movie)
                {
                    StreamReader fm2      = File.OpenText(Path.Combine(testSuite.basepath, test.movie));
                    Controller   player1  = new Controller();
                    Controller   player2  = new Controller();
                    bool         movieEnd = Fm2Reader(fm2, ref player1, ref player2);
                    while (!close && !movieEnd)
                    {
                        testCore.Start(player1, player2, false);
                        testCore.APU.ResetBuffer();
                        movieEnd = Fm2Reader(fm2, ref player1, ref player2);
                    }
                }
                else if (test.type == TestType.noinput)
                {
                    while (frame++ != test.frame && !close)
                    {
                        testCore.Start(new Controller(), new Controller(), false);
                        testCore.APU.ResetBuffer();
                    }
                }
                foreach (ComparisonGroup compares in test.comparisonGroups)
                {
                    bool pass   = true;
                    uint result = 0;
                    //output.Append(compares.name + ": ");
                    foreach (Comparison compare in compares.comparisons)
                    {
                        if (compare.type == CompareType.memory)
                        {
                            switch (compare.op)
                            {
                            default:
                            case ComparisonOperator.equal:
                                if (testCore.Memory[compare.address] != compare.value)
                                {
                                    pass = false;
                                }
                                result = testCore.Memory[compare.address];
                                break;

                            case ComparisonOperator.notequal:
                                if (testCore.Memory[compare.address] == compare.value)
                                {
                                    pass = false;
                                }
                                result = testCore.Memory[compare.address];
                                break;

                            case ComparisonOperator.lessthan:
                                if (testCore.Memory[compare.address] >= compare.value)
                                {
                                    pass = false;
                                }
                                result = testCore.Memory[compare.address];
                                break;

                            case ComparisonOperator.greaterthan:
                                if (testCore.Memory[compare.address] <= compare.value)
                                {
                                    pass = false;
                                }
                                result = testCore.Memory[compare.address];
                                break;
                            }
                        }
                        else if (compare.type == CompareType.screenshot)
                        {
                            uint CRC = GetScreenCRC(testCore.PPU.screen);
                            switch (compare.op)
                            {
                            default:
                            case ComparisonOperator.equal:
                                if (compare.crc != CRC)
                                {
                                    pass = false;
                                }
                                result = CRC;
                                break;

                            case ComparisonOperator.notequal:
                                if (compare.crc == CRC)
                                {
                                    pass = false;
                                }
                                result = CRC;
                                break;

                            case ComparisonOperator.lessthan:
                                if (compare.crc >= CRC)
                                {
                                    pass = false;
                                }
                                result = CRC;
                                break;

                            case ComparisonOperator.greaterthan:
                                if (compare.crc <= CRC)
                                {
                                    pass = false;
                                }
                                result = CRC;
                                break;
                            }
                        }
                    }
                    if (pass)
                    {
                        output.Append(@"\cf2" + compares.pass + @"\par");
                    }
                    else
                    {
                        output.Append(@"\cf3" + compares.fail + @"\par");
                    }
                }
            }
            output.Append(@"\cf1Tests Complete\par");
            running   = false;
            finalDraw = true;
        }