public void GivenCyclicDependency_FiresUpdateFailedEvent()
        {
            //Arrange
            bool eventFired = false;
            var  alfa       = new Alfa();
            var  beta       = new Beta(alfa);
            var  nodeA      = new PropertyNode(nameof(alfa.A), alfa);
            var  nodeB      = new PropertyNode(nameof(alfa.B), alfa);
            var  nodeD      = new PropertyNode(nameof(beta.D), beta);

            var reactor = new Reactor("R1");

            reactor.CreateDependency(nodeA, nodeB);
            reactor.CreateDependency(nodeB, nodeD);
            reactor.CreateDependency(nodeD, nodeA);

            reactor.UpdateFailed += delegate
            {
                eventFired = true;
            };

            //Act
            reactor.PerformUpdate();

            //Assert
            Assert.IsTrue(eventFired);
        }
        public void AddPredecessor_AddingItself_ThrowsException()
        {
            //Arrange
            var obj   = new Alfa();
            var nodeA = new PropertyNode(nameof(obj.A), obj);

            //Act
            nodeA.AddPredecessor(nodeA);
        }
        public void AddPredecessor_GivenNullNode_ThrowsException()
        {
            //Arrange
            var obj   = new Alfa();
            var nodeA = new PropertyNode(nameof(obj.A), obj);

            //Act
            nodeA.AddPredecessor(null);
        }
        public void CreateDependency_GivenPredecessorAndSuccessorAreSame_ThrowsException()
        {
            //Arrange
            var obj     = new Alfa();
            var node    = new PropertyNode(nameof(obj.A), obj);
            var reactor = new Reactor("R1");

            //Act
            reactor.CreateDependency(node, node);
        }
        public void Constructor_GivenValidArguments_IdentifierIsGenerated()
        {
            //Arrange
            var obj = new Alfa();

            //Act
            var node = new PropertyNode(nameof(obj.A), obj);

            //Assert
            Assert.IsTrue(node.Identifier != 0);
        }
Example #6
0
        /// <summary>
        /// Получить экземпляр результат по параметрам
        /// </summary>
        /// <returns></returns>
        public Result ToResult()
        {
            Result result = new Result();

            result.ListX.Add((Vector)X0.Clone());
            if (P != null)
            {
                result.ListP.Add((Vector)P.Clone());
            }
            result.Alfas = (Vector)Alfa.Clone();
            return(result);
        }
        public void Constructor_GivenDifferentObjectMemberPair_NodesAreNotEqual()
        {
            //Arrange
            var obj = new Alfa();

            //Act
            var node1 = new PropertyNode(nameof(obj.A), obj);
            var node2 = new PropertyNode(nameof(obj.B), obj);

            //Assert
            Assert.AreNotEqual(node1, node2);
        }
        public void Constructor_GivenDifferentObjectMemberPair_NodeHaveSameIdentifier()
        {
            //Arrange
            var obj = new Alfa();

            //Act
            var node1 = new PropertyNode(nameof(obj.A), obj);
            var node2 = new PropertyNode(nameof(obj.B), obj);

            //Assert
            Assert.IsFalse(node1.Identifier == node2.Identifier);
        }
        public void AddNode_GivenValidNode_NodeIsAdded()
        {
            //Arrange
            var obj     = new Alfa();
            var node    = new PropertyNode(nameof(obj.A), obj);
            var reactor = new Reactor("R1");

            //Act
            reactor.AddNode(node);

            //Assert
            Assert.IsTrue(reactor.GetNode(node.Identifier) != null);
        }
        public void PerformUpdate_GivenEmptyGraph1_ReturnsEmptyUpdateLog()
        {
            //Arrange
            var obj     = new Alfa();
            var nodeA   = new PropertyNode(nameof(obj.A), obj);
            var reactor = new Reactor("R1");

            //Act
            reactor.PerformUpdate(nodeA);

            //Assert
            Assert.IsTrue(reactor.LastUpdateLog.Count == 0);
        }
        public void GetNode_GivenNoMatchingNode2_ReturnsNull()
        {
            //Arrange
            var obj     = new Alfa();
            var node    = new PropertyNode(nameof(obj.A), obj);
            var reactor = new Reactor("R1");

            //Act
            var fetchedNode = reactor.GetNode(node.Identifier);

            //Assert
            Assert.IsNull(fetchedNode);
        }
        public void Constructor_GivenValidArguments_CreatesReactiveNode()
        {
            //Arrange
            var obj = new Alfa();

            //Act
            var node = new PropertyNode(nameof(obj.A), obj);

            //Assert
            Assert.IsTrue(node != null &&
                          node.Member == nameof(obj.A) &&
                          node.Owner == obj);
        }
        public void AddPredecessor_GivenValidNode_PredecessorIsAdded()
        {
            //Arrange
            var obj   = new Alfa();
            var nodeA = new PropertyNode(nameof(obj.A), obj);
            var nodeB = new PropertyNode(nameof(obj.B), obj);

            //Act
            nodeB.AddPredecessor(nodeA);

            //Assert
            Assert.IsTrue(nodeB.Predecessors.Contains(nodeA));
        }
        public void RemovePredecessor_GivenExistingPredecessor_PredecessorIsRemoved()
        {
            //Arrange
            var obj   = new Alfa();
            var nodeA = new PropertyNode(nameof(obj.A), obj);
            var nodeB = new PropertyNode(nameof(obj.B), obj);

            nodeB.AddPredecessor(nodeA);

            //Act
            nodeB.RemovePredecessor(nodeA);

            //Assert
            Assert.IsFalse(nodeB.Predecessors.Contains(nodeA));
        }
        public void RemoveSuccessor_GivenExistingSuccessor_SuccessorIsRemoved()
        {
            //Arrange
            var obj   = new Alfa();
            var nodeA = new PropertyNode(nameof(obj.A), obj);
            var nodeB = new PropertyNode(nameof(obj.B), obj);

            nodeA.AddSuccessor(nodeB);

            //Act
            nodeA.RemoveSuccessor(nodeB);

            //Assert
            Assert.IsFalse(nodeA.Successors.Contains(nodeB));
        }
        public void AddPredecessor_GivenAlreadyExistingPredecessor_PredecessorIsNotAdded()
        {
            //Arrange
            var obj   = new Alfa();
            var nodeA = new PropertyNode(nameof(obj.A), obj);
            var nodeB = new PropertyNode(nameof(obj.B), obj);

            nodeA.AddPredecessor(nodeB);

            //Act
            nodeA.AddPredecessor(nodeB);

            //Assert
            Assert.IsTrue(nodeA.Predecessors.Count == 1);
        }
        public void AddNode_GivenExistingNode_NodeIsNotAdded()
        {
            //Arrange
            var obj     = new Alfa();
            var node    = new PropertyNode(nameof(obj.A), obj);
            var reactor = new Reactor("R1");

            reactor.AddNode(node);

            //Act
            reactor.AddNode(node);

            //Assert
            Assert.IsTrue(reactor.Nodes.Count == 1);
        }
        public void RemoveNode_GivenExistingNode_NodeIsRemoved()
        {
            //Arrange
            var obj     = new Alfa();
            var node    = new PropertyNode(nameof(obj.A), obj);
            var reactor = new Reactor("R1");

            reactor.AddNode(node);

            //Act
            reactor.RemoveNode(node);

            //Assert
            Assert.IsTrue(reactor.GetNode(node.Identifier) == null);
        }
        public void GetNode_GivenExistingNode1_ReturnsMatchingNode()
        {
            //Arrange
            var obj     = new Alfa();
            var node    = new PropertyNode(nameof(obj.A), obj);
            var reactor = new Reactor("R1");

            reactor.AddNode(node);

            //Act
            var fetchedNode = reactor.GetNode(node.Member, node.Owner);

            //Assert
            Assert.IsNotNull(fetchedNode);
        }
        public void PerformUpdate_GivenCompleteUpdateRequested_PerformsCorrectUpdate()
        {
            //Arrange
            var alfa = new Alfa();
            var beta = new Beta(alfa);
            var gama = new Gama(alfa, beta);

            var nodeA = new PropertyNode(nameof(alfa.A), alfa);
            var nodeB = new PropertyNode(nameof(alfa.B), alfa);
            var nodeC = new PropertyNode(nameof(beta.C), beta);
            var nodeD = new PropertyNode(nameof(beta.D), beta);
            var nodeE = new PropertyNode(nameof(gama.E), gama);
            var nodeF = new PropertyNode(nameof(gama.F), gama);

            var reactor = new Reactor("R1");

            reactor.CreateDependency(nodeA, nodeE);
            reactor.CreateDependency(nodeA, nodeB);
            reactor.CreateDependency(nodeA, nodeD);
            reactor.CreateDependency(nodeC, nodeD);
            reactor.CreateDependency(nodeB, nodeE);
            reactor.CreateDependency(nodeB, nodeF);
            reactor.CreateDependency(nodeD, nodeF);
            reactor.CreateDependency(nodeE, nodeF);

            //Act
            reactor.PerformUpdate();

            //Assert
            var updateLog = reactor.LastUpdateLog;
            int indexA    = updateLog.IndexOf(nodeA);
            int indexB    = updateLog.IndexOf(nodeB);
            int indexC    = updateLog.IndexOf(nodeC);
            int indexD    = updateLog.IndexOf(nodeD);
            int indexE    = updateLog.IndexOf(nodeE);
            int indexF    = updateLog.IndexOf(nodeF);

            Assert.IsTrue(updateLog.Count == 6);
            Assert.IsTrue(indexF > indexB && indexF > indexD && indexF > indexE);
            Assert.IsTrue(indexE > indexB && indexE > indexA);
            Assert.IsTrue(indexB > indexA);
            Assert.IsTrue(indexD > indexA && indexD > indexC);
        }
Example #21
0
        /// <summary>
        /// Получить дубликат
        /// </summary>
        /// <returns></returns>
        public object Clone()
        {
            Params clone = new Params();

            if (X0 != null)
            {
                clone.X0 = (Vector)X0.Clone();
            }
            if (P != null)
            {
                clone.P = (Vector)P.Clone();
            }
            if (Alfa != null)
            {
                clone.Alfa = (Vector)Alfa.Clone();
            }
            clone.H = H;
            clone.Y = Y;
            return(clone);
        }
        public void CreateDependency_GivenValidPredecessorAndSuccessor_DependencyCreated()
        {
            //Arrange
            var obj     = new Alfa();
            var nodeA   = new PropertyNode(nameof(obj.A), obj);
            var nodeB   = new PropertyNode(nameof(obj.B), obj);
            var reactor = new Reactor("R1");

            //Act
            reactor.CreateDependency(nodeA, nodeB);

            //Assert
            var predecessor = reactor.GetNode(nodeA.Identifier);
            var successor   = reactor.GetNode(nodeB.Identifier);

            Assert.IsTrue(predecessor != null &&
                          successor != null &&
                          predecessor.Successors.Contains(successor) &&
                          successor.Predecessors.Contains(predecessor));
        }
        public void RemoveDependency_GivenValidDependency_DependencyRemoved()
        {
            //Arrange
            var obj     = new Alfa();
            var nodeA   = new PropertyNode(nameof(obj.A), obj);
            var nodeB   = new PropertyNode(nameof(obj.B), obj);
            var reactor = new Reactor("R1");

            reactor.CreateDependency(nodeA, nodeB);

            //Act
            reactor.RemoveDependency(nodeA, nodeB);

            //Assert
            var predecessor = reactor.GetNode(nodeA.Identifier);
            var successor   = reactor.GetNode(nodeB.Identifier);

            Assert.IsTrue(predecessor.Successors.Contains(successor) == false &&
                          successor.Predecessors.Contains(predecessor) == false);
        }
        public void GivenUpdateIsSuccessful_FiresUpdateSuccessfulEvent()
        {
            //Arrange
            bool eventFired = false;
            var  alfa       = new Alfa();
            var  nodeA      = new PropertyNode(nameof(alfa.A), alfa);
            var  nodeB      = new PropertyNode(nameof(alfa.B), alfa);
            var  reactor    = new Reactor("R1");

            reactor.CreateDependency(nodeA, nodeB);
            reactor.UpdateSuccessful += delegate
            {
                eventFired = true;
            };

            //Act
            reactor.PerformUpdate();

            //Assert
            Assert.IsTrue(eventFired);
        }
Example #25
0
        /// <summary>
        /// Привести к строке
        /// </summary>
        /// <returns></returns>
        new public string ToString()
        {
            string str = "";

            if (X0 != null)
            {
                str += "\tX0: " + X0.ToString().Replace("\t", "\t\t");
            }
            if (P != null)
            {
                str += "\tP: " + P.ToString().Replace("\t", "\t\t");
            }
            if (Alfa != null)
            {
                str += "\tAlfa: " + Alfa.ToString().Replace("\t", "\t\t");
            }
            str += "\tH: " + H + ";\n";
            if (Y != null)
            {
                str += "\tFunction: " + Y.ToString().Replace("\t", "\t\t") + ";\n";
            }
            return(str);
        }
Example #26
0
 public override string ToString()
 {
     return("Alfa : ( " + Alfa.ToString() + "), Beta : (" + Beta.ToString() + "), Center : (" + Center.ToString() + ")");
 }