示例#1
0
        public void MeasureFlagShouldWork()
        {
            // Measure 0x0002 >= 80
            FakeConsoleRam ram = new FakeConsoleRam(0xFF);

            ram.Data[0x0000] = 0;
            ram.Data[0x0001] = 0x12;
            ram.Data[0x0002] = 0x34;
            ram.Data[0x0003] = 0xAB;
            ram.Data[0x0004] = 0x56;

            MeasureConditionInstruction condition1 = new MeasureConditionInstruction()
            {
                CompareInstruction = new CompareInstruction()
                {
                    Left = new ReadMemoryValue()
                    {
                        Address = 0x0002,
                        Kind    = MemoryAddressKind.Int8,
                    },
                    Right     = new ConstValue(80),
                    Operation = ConditionCompare.GreaterEquals
                }
            };

            AchievementInstruction achivement = new AchievementInstruction()
            {
                Core = new ConditionGroupInstruction(new[] { condition1 })
            };

            Assert.False(achivement.Evaluate(ram));
            Assert.Equal(0x34, achivement.Context.MeasuredValue.Value);
            Assert.Equal(80, achivement.Context.MeasuredTarget.Value);

            ram.Data[0x0002] = 79;
            Assert.False(achivement.Evaluate(ram));
            Assert.Equal(79, achivement.Context.MeasuredValue.Value);
            Assert.Equal(80, achivement.Context.MeasuredTarget.Value);

            ram.Data[0x0002] = 80;
            Assert.True(achivement.Evaluate(ram));
            Assert.Equal(80, achivement.Context.MeasuredValue.Value);
            Assert.Equal(80, achivement.Context.MeasuredTarget.Value);

            ram.Data[0x0002] = 255;
            Assert.True(achivement.Evaluate(ram));
            Assert.Equal(255, achivement.Context.MeasuredValue.Value);
            Assert.Equal(80, achivement.Context.MeasuredTarget.Value);
        }
示例#2
0
        public void MeasureIfFlagShouldWork()
        {
            // Measure 0x0002 == 52 (3)
            // MeasureIf 0x0001 == 1

            FakeConsoleRam ram = new FakeConsoleRam(0xFF);

            ram.Data[0x0001] = 0;
            ram.Data[0x0002] = 52;

            MeasureConditionInstruction condition1 = new MeasureConditionInstruction()
            {
                CompareInstruction = new CompareInstruction()
                {
                    Left = new ReadMemoryValue()
                    {
                        Address = 0x0002,
                        Kind    = MemoryAddressKind.Int8
                    },
                    Right     = new ConstValue(52),
                    Operation = ConditionCompare.Equals
                },
                TargetHitCount = 3
            };

            MeasureIfConditionInstruction condition2 = new MeasureIfConditionInstruction()
            {
                CompareInstruction = new CompareInstruction()
                {
                    Left = new ReadMemoryValue()
                    {
                        Address = 0x0001,
                        Kind    = MemoryAddressKind.Int8,
                    },
                    Right     = new ConstValue(1),
                    Operation = ConditionCompare.Equals
                }
            };

            AchievementInstruction achievement = new AchievementInstruction()
            {
                Core = new ConditionGroupInstruction(new ConditionInstruction[] {
                    condition1, condition2
                })
            };

            ram.Data[0x0001] = 0;
            Assert.False(achievement.Evaluate(ram));
            Assert.Equal(1, condition1.CurrentHitCount);
            Assert.False(achievement.Context.MeasuredValue.HasValue);
            Assert.Equal(3, achievement.Context.MeasuredTarget.Value);

            ram.Data[0x0001] = 1;
            Assert.False(achievement.Evaluate(ram));
            Assert.Equal(2, condition1.CurrentHitCount);
            Assert.Equal(2, achievement.Context.MeasuredValue.Value);
            Assert.Equal(3, achievement.Context.MeasuredTarget.Value);

            ram.Data[0x0001] = 0;
            Assert.False(achievement.Evaluate(ram));
            Assert.Equal(3, condition1.CurrentHitCount);
            Assert.False(achievement.Context.MeasuredValue.HasValue);
            Assert.Equal(3, achievement.Context.MeasuredTarget.Value);

            ram.Data[0x0001] = 1;
            Assert.True(achievement.Evaluate(ram));
            Assert.Equal(3, condition1.CurrentHitCount);
            Assert.Equal(3, achievement.Context.MeasuredValue.Value);
            Assert.Equal(3, achievement.Context.MeasuredTarget.Value);
        }