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); }
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); }
/// <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)); } }
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()); }