예제 #1
0
 public void Operand_ConstructorCheckRandomCreateX_RandomX()
 {
     var op = new Operand();
     int i = 0;
     while (op.OperandType != OperandEnum.x && i < 100000)
     {
         op = new Operand();
         i++;
     }
     Assert.AreEqual(op.OperandType, OperandEnum.x);
 }
예제 #2
0
 public void Mutate_ChecksToSeeMutate_ValueChanges()
 {
     var op = new Operand();
     var opVal = op.Type;
     op.Mutate();
     while (op.Type == opVal)
     {
         op.Mutate();
     }
     Assert.AreNotEqual(opVal, op.Type);
 }
예제 #3
0
 public void Operator_ConstructorInputsPlus_CreatesOperatorTreeBasedUponInputs()
 {
     var left = new Operand(OperandEnum.x);
     var Right = new Operand(OperandEnum.three);
     var op = new Operator(OperatorEnum.add, left, Right);
     Assert.AreEqual(left.Type, op.Left.Type, "left type");
     Assert.AreEqual(Right.Type, op.Right.Type, "right type");
     Assert.AreEqual("(x+3)", op.ToString(), "to string");
     Assert.AreEqual(8, op.Evalate(5), "evaluate");
     Assert.AreEqual(false, op.DivideByZeroFlag, "divide by zero flag");
     Assert.AreEqual(2, op.Size(), "height");
     Assert.AreEqual(true, op.GetRandomNode().Type == op.Type
         || op.GetRandomNode().Type == left.Type
         || op.GetRandomNode().Type == Right.Type, "random node");
 }
예제 #4
0
 public void Operator_ConstructorInputsMultiply_CreatesOperatorTreeBasedUponInputs()
 {
     var left = new Operand(OperandEnum.x);
     var right = new Operand(OperandEnum.three);
     var op = new Operator(OperatorEnum.multiply, left, right);
     Assert.AreEqual(left.Type, op.Left.Type);
     Assert.AreEqual(right.Type, op.Right.Type);
     Assert.AreEqual("(x*3)", op.ToString());
     Assert.AreEqual(15, op.Evalate(5));
     Assert.AreEqual(false, op.DivideByZeroFlag);
     Assert.AreEqual(2, op.Size());
     Assert.AreEqual(true, op.GetRandomNode().Type == op.Type
         || op.GetRandomNode().Type == left.Type
         || op.GetRandomNode().Type == right.Type);
 }
예제 #5
0
 public void Operand_ConstructorX_CreatesOperandGivenInputs()
 {
     var op = new Operand(OperandEnum.x);
     Assert.AreEqual(op.HasChildren(), false);
     Assert.AreEqual(op.HasParent(), false);
     Assert.AreEqual(op.IsLeftChild, false);
     Assert.AreEqual(op.DivideByZeroFlag, false);
     Assert.AreEqual(op.Type <= 10, true);
     Assert.AreEqual(op.Type >= 1, true);
     Assert.AreEqual(op.Left, null);
     Assert.AreEqual(op.Right, null);
     Assert.AreEqual(op.Size(), 1);
     Assert.AreEqual(op.Evalate(5), 5.0);
     Assert.AreEqual(op.Type, 10);
     Assert.AreEqual(op.ToString(), "x");
 }
예제 #6
0
 public void Operator_ConstructorInputsDivideWithZero_CreatesOperatorTreeBasedUponInputs()
 {
     var left = new Operand(OperandEnum.x);
     var right = new Operand(OperandEnum.zero);
     var op = new Operator(OperatorEnum.divide, left, right);
     Assert.AreEqual(left.Type, op.Left.Type, "type of left");
     Assert.AreEqual(right.Type, op.Right.Type, "type of right");
     Assert.AreEqual("(x/0)", op.ToString(), "string");
     Assert.AreEqual(double.MaxValue, op.Evalate(6), "evaluate");
     Assert.AreEqual(true, op.DivideByZeroFlag, "divide by zero flage");
     Assert.AreEqual(2, op.Size(), "height");
     //Assert.AreEqual(4, op.GetRandomNode().Type);
     Assert.AreEqual(true, (op.GetRandomNode().Type == op.Type
         || op.GetRandomNode().Type == left.Type
         || op.GetRandomNode().Type == right.Type), "random node");
 }
예제 #7
0
파일: Operand.cs 프로젝트: evanbb/SEIS610
 public override Node GetCopy()
 {
     var op = new Operand(this.OperandType);
     return op;
 }
예제 #8
0
 public void Operand_Constructor_CreatesRandomOperand()
 {
     var op = new Operand();
     op.IsLeftChild = false;
     Assert.AreEqual(op.HasChildren(), false);
     Assert.AreEqual(op.HasParent(), false);
     Assert.AreEqual(op.IsLeftChild, false);
     Assert.AreEqual(op.DivideByZeroFlag, false);
     Assert.AreEqual(op.Type <= 10, true);
     Assert.AreEqual(op.Type >= 1, true);
     Assert.AreEqual(op.Left, null);
     Assert.AreEqual(op.Right, null);
     Assert.AreEqual(op.Size(), 1);
     op.IsLeftChild = true;
     Assert.AreEqual(op.IsLeftChild, true);
 }
예제 #9
0
 public void GetRandomNode_NoChildren_ReturnsSelf()
 {
     var op = new Operand();
     var opC = op.GetRandomNode();
     Assert.AreEqual(op.Type, op.Type);
 }
예제 #10
0
 /// <summary>
 /// Creates the right child based upon the given inputs
 /// </summary>
 /// <param name="currHeight"></param>
 /// <param name="minReachedLeft"></param>
 private void CreateRight(int currHeight, bool minReachedLeft = true)
 {
     if (currHeight + 1 < Settings.MaxTreeHeight)
     {
         if (currHeight < Settings.MinTreeHeight && !minReachedLeft)
         { _right = new Operator(currHeight + 1, minReachedLeft); }
         else
         {
             if (_rGen.NextDouble() < Settings.OperandProb)
             { _right = new Operand(); }
             else
             { _right = new Operator(currHeight + 1, minReachedLeft); }
         }
     }
     else { _right = new Operand(); }
     _right.Parent = this;
     _right.IsLeftChild = false;
 }
예제 #11
0
 /// <summary>
 /// Shrinks the tree to maxTreeCrossoverHeight
 /// </summary>
 /// <param name="currHeight"></param>
 /// <returns></returns>
 public override bool Shrink(int currHeight)
 {
     if ((currHeight + 1) >= (Settings.MaxTreeCrossoverHeight))
     {
         _left = new Operand();
         _right = new Operand();
         return true;
     }
     else
     {
         return _left.Shrink(currHeight + 1) || _right.Shrink(currHeight + 1);
     }
 }