예제 #1
0
 /// <summary>
 /// Sets the jump type of the Cond, based on the original relational operator, and a pattern
 /// </summary>
 /// <param name="originalrelop">The original relational operator</param>
 private void LessPattern(Instruction.RelationalOperationType originalrelop)
 {
     relop = (Instruction.RelationalOperationType)Randomizer.OneFromMany(Instruction.RelationalOperationType.Equals,
                                                                         Instruction.RelationalOperationType.Greater,
                                                                         Instruction.RelationalOperationType.GreaterOrEquals,
                                                                         Instruction.RelationalOperationType.NotEquals,
                                                                         Instruction.RelationalOperationType.Smaller,
                                                                         Instruction.RelationalOperationType.SmallerOrEquals);
     if (relop == Instruction.RelationalOperationType.Smaller || relop == Instruction.RelationalOperationType.SmallerOrEquals || relop == Instruction.RelationalOperationType.Equals)
     {
         if (originalrelop == Instruction.RelationalOperationType.Greater || originalrelop == Instruction.RelationalOperationType.GreaterOrEquals || originalrelop == Instruction.RelationalOperationType.Equals)
         {
             JumpType = BlockJumpType.False;
         }
         else
         {
             JumpType = BlockJumpType.True;
         }
     }
     else
     {
         JumpType = BlockJumpType.Ambigious;
     }
 }
예제 #2
0
            /// <summary>
            /// Sets the jump type of a Cond
            /// </summary>
            /// <param name="generatedconstant">The constant which has been generated by us</param>
            /// <param name="originalconstant">The original constant</param>
            /// <param name="originalrelop">The original relational operator</param>
            private void SetJumpType(int generatedconstant, int originalconstant, Instruction.RelationalOperationType originalrelop)
            {
                if (generatedconstant == originalconstant - 1)
                {
                    switch (originalrelop)
                    {
                    case Instruction.RelationalOperationType.GreaterOrEquals:
                        relop    = Instruction.RelationalOperationType.Greater;
                        JumpType = BlockJumpType.Last;
                        break;

                    case Instruction.RelationalOperationType.Smaller:
                        relop    = Instruction.RelationalOperationType.SmallerOrEquals;
                        JumpType = BlockJumpType.Last;
                        break;

                    case Instruction.RelationalOperationType.Equals:
                        relop    = Instruction.RelationalOperationType.Greater;
                        JumpType = BlockJumpType.Last;
                        break;

                    case Instruction.RelationalOperationType.NotEquals:
                        relop    = Instruction.RelationalOperationType.Smaller;
                        JumpType = BlockJumpType.Last;
                        break;

                    default:
                        LessPattern(originalrelop);
                        break;
                    }
                }
                else if (generatedconstant == originalconstant + 1)
                {
                    switch (originalrelop)
                    {
                    case Instruction.RelationalOperationType.Greater:
                        relop    = Instruction.RelationalOperationType.GreaterOrEquals;
                        JumpType = BlockJumpType.Last;
                        break;

                    case Instruction.RelationalOperationType.SmallerOrEquals:
                        relop    = Instruction.RelationalOperationType.Smaller;
                        JumpType = BlockJumpType.Last;
                        break;

                    case Instruction.RelationalOperationType.Equals:
                        relop    = Instruction.RelationalOperationType.Smaller;
                        JumpType = BlockJumpType.Last;
                        break;

                    case Instruction.RelationalOperationType.NotEquals:
                        relop    = Instruction.RelationalOperationType.Greater;
                        JumpType = BlockJumpType.Last;
                        break;

                    default:
                        GreaterPattern(originalrelop);
                        break;
                    }
                }
                else if (generatedconstant < originalconstant)
                {
                    LessPattern(originalrelop);
                }
                else
                {
                    GreaterPattern(originalrelop);
                }
            }