Example #1
0
        public void TestNewRuleReturnsCorrectMetabolicRule()
        {
            FloatingObject           floatingObject = new FloatingObject("a", 1, 1);
            Protein                  protein        = new Protein("p1");
            List <ISimulationObject> leftSide       = new List <ISimulationObject> {
                floatingObject, protein
            };
            List <ISimulationObject> rightSide = new List <ISimulationObject> {
                protein, floatingObject
            };
            EvoMetabolicRule metabolicRule = TypeUtil.Cast <EvoMetabolicRule>(EvolutionRule.NewRule("Metabolic", 0, leftSide, rightSide, 0));

            Assert.AreEqual(0, metabolicRule.Priority);
            Assert.AreEqual(EvolutionRule.RuleType.Metabolic, metabolicRule.Type);
            Assert.AreEqual(EvoMetabolicRule.MetabolicRuleType.Symport, metabolicRule.SubType);
            Assert.AreEqual(2, metabolicRule.LeftSideObjects.Count);
            Assert.AreEqual("a", metabolicRule.LeftSideObjects[0].Name);
            Assert.AreEqual("p1", metabolicRule.LeftSideObjects[1].Name);
            Assert.AreEqual(2, metabolicRule.RightSideObjects.Count);
            Assert.AreEqual("p1", metabolicRule.RightSideObjects[0].Name);
            Assert.AreEqual("a", metabolicRule.RightSideObjects[1].Name);
            Assert.AreEqual(0, metabolicRule.MLeftInNames.Count);
            Assert.AreEqual(1, metabolicRule.MLeftOutNames.Count);
            Assert.AreEqual(1, metabolicRule.MLeftOutNames.ToDictionary()["a"]);
            Assert.AreEqual(1, metabolicRule.MRightInNames.Count);
            Assert.AreEqual(1, metabolicRule.MRightInNames.ToDictionary()["a"]);
            Assert.AreEqual(0, metabolicRule.MRightOutNames.Count);
            Assert.AreEqual("p1", metabolicRule.RProtein.Name);
        }
Example #2
0
        public void TestNewRuleReturnsCorrectNonMetabolicRule()
        {
            Glue                     glue           = new Glue("pa");
            FloatingObject           floatingObject = new FloatingObject("a", 1, 1);
            List <ISimulationObject> leftSide       = new List <ISimulationObject> {
                glue, glue, floatingObject, floatingObject
            };
            List <ISimulationObject> rightSide = new List <ISimulationObject> {
                glue, glue
            };
            EvoNonMetabolicRule divideRule = TypeUtil.Cast <EvoNonMetabolicRule>(EvolutionRule.NewRule("Divide", 1, leftSide, rightSide, 0));

            Assert.AreEqual(1, divideRule.Priority);
            Assert.AreEqual(EvolutionRule.RuleType.Divide, divideRule.Type);
            Assert.AreEqual(4, divideRule.LeftSideObjects.Count);
            Assert.AreEqual("pa", divideRule.LeftSideObjects[0].Name);
            Assert.AreEqual("pa", divideRule.LeftSideObjects[1].Name);
            Assert.AreEqual("a", divideRule.LeftSideObjects[2].Name);
            Assert.AreEqual("a", divideRule.LeftSideObjects[3].Name);
            Assert.AreEqual(2, divideRule.RightSideObjects.Count);
            Assert.AreEqual("pa", divideRule.RightSideObjects[0].Name);
            Assert.AreEqual("pa", divideRule.RightSideObjects[1].Name);
            Assert.AreEqual(2, divideRule.MLeftSideFloatingNames.Count);
            Assert.AreEqual(2, divideRule.MLeftSideFloatingNames.ToDictionary()["a"]);
            Assert.AreEqual(0, divideRule.MRightSideFloatingNames.Count);
        }
Example #3
0
        /// <summary>
        /// Deserialize given XML list of evolution rules.
        /// </summary>
        /// <param name="evolutionRules">XML list of evolution rules.</param>
        /// <exception cref="MissingXmlAttribute">If some attribute of floating object is missing.</exception>
        /// <exception cref="MissingXmlElement">If some element of floating object is missing.</exception>
        private void DeserializeEvolutionRules(List <XElement> evolutionRules)
        {
            EvolutionRules = new List <EvolutionRule>();
            foreach (XElement evolutionRule in evolutionRules)
            {
                string   type           = Xmlizer.GetAttributeValueWithException(evolutionRule, "evoRule", "type");
                int      priority       = Convert.ToInt32(evolutionRule.Attribute("priority")?.Value);
                int      delay          = Convert.ToInt32(evolutionRule.Attribute("delay")?.Value);
                XElement leftSideObject = evolutionRule.Element("leftside");
                if (leftSideObject == null)
                {
                    throw new MissingXmlElement("Element leftside of evoRule is missing");
                }
                char[] delimiter           = { ',' };
                var    leftSideObjectNames = Xmlizer.GetAttributeValueWithException(leftSideObject, "leftside", "value")
                                             .Split(delimiter, StringSplitOptions.RemoveEmptyEntries);

                XElement rightSideObject = evolutionRule.Element("rightside");
                if (rightSideObject == null)
                {
                    throw new MissingXmlElement("Element rightside of evoRule is missing");
                }
                var rightSideObjectNames = Xmlizer.GetAttributeValueWithException(rightSideObject, "rightside", "value")
                                           .Split(delimiter, StringSplitOptions.RemoveEmptyEntries);

                var leftSideObjects  = leftSideObjectNames.Select(GetSimulationObject).ToList();
                var rightSideObjects = rightSideObjectNames.Select(GetSimulationObject).ToList();

                EvolutionRules.Add(EvolutionRule.NewRule(type, priority, leftSideObjects, rightSideObjects, delay));
            }
        }
Example #4
0
        public void TestToStringReturnsCompleteString()
        {
            FloatingObject           floatingObject = new FloatingObject("a", 1, 1);
            Protein                  protein        = new Protein("p1");
            List <ISimulationObject> leftSide       = new List <ISimulationObject> {
                floatingObject, protein
            };
            List <ISimulationObject> rightSide = new List <ISimulationObject> {
                protein, floatingObject
            };
            EvolutionRule metabolicRule  = EvolutionRule.NewRule("Metabolic", 0, leftSide, rightSide, 0);
            string        expectedOutput = "Rule: a,p1 -> p1,a, type = Metabolic, priority = 0";

            Assert.AreEqual(expectedOutput, metabolicRule.ToString());
        }