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); }
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); }
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"); }
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); }
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"); }
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"); }
public override Node GetCopy() { var op = new Operand(this.OperandType); return op; }
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); }
public void GetRandomNode_NoChildren_ReturnsSelf() { var op = new Operand(); var opC = op.GetRandomNode(); Assert.AreEqual(op.Type, op.Type); }
/// <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; }
/// <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); } }