public void SystemToExpressionTest() { Project p = new Project(); MathSystem s1 = p.CurrentSystem; // BUILD SYSTEM 1: sin(x^2)*2 Signal x = Binder.CreateSignal(); x.Label = "x"; Std.ConstrainAlwaysReal(x); Signal x2 = StdBuilder.Square(x); x2.Label = "x2"; Signal sinx2 = StdBuilder.Sine(x2); sinx2.Label = "sinx2"; Signal sinx2t2 = sinx2 * IntegerValue.ConstantTwo; s1.AddSignalTree(sinx2t2, true, true); // EVALUATE SYSTEM 1 FOR x=1.5 x.PostNewValue(new RealValue(1.5)); p.SimulateInstant(); Assert.AreEqual(0, s1.BusCount, "A0"); Assert.AreEqual(5, s1.SignalCount, "A1"); Assert.AreEqual(3, s1.PortCount, "A2"); Assert.AreEqual("Std.Real(1.55614639377584)", sinx2t2.Value.ToString(), "A3"); // SERIALIZE SYSTEM 1 TO EXPRESSION ExpressionWriter writer = new ExpressionWriter(); SystemReader reader = new SystemReader(writer); reader.ReadSystem(s1); string expr = writer.WrittenExpressions.Dequeue(); Console.WriteLine(expr); // .... }
public void Parser_StructuralExpressions() { Project p = new Project(); ILibrary l = Service<ILibrary>.Instance; MathSystem s = p.CurrentSystem; s.AddNamedSignal("w", new RealValue(0.1)); p.SimulateInstant(); p.Interpret("define entity Test \"test\" function in x,c out y;"); Assert.IsTrue(l.ContainsEntity(new MathIdentifier("Test", "Work")),"01"); Assert.AreEqual("Work.Test", l.LookupEntity("test", 2).EntityId.ToString()); p.Interpret("instantiate Work.Test in x->a,c->a*b out res1;\nres2 <- test(a*b,b);"); Assert.AreEqual("Work.Test", s.LookupNamedSignal("res1").DrivenByPort.Entity.EntityId.ToString(),"02"); Assert.AreEqual("Work.Test", s.LookupNamedSignal("res2").DrivenByPort.Entity.EntityId.ToString(),"03"); Assert.AreEqual("Std.Multiply", s.LookupNamedSignal("res1").DrivenByPort.InputSignals[1].DrivenByPort.Entity.EntityId.ToString(),"04"); Assert.AreEqual("Std.Multiply", s.LookupNamedSignal("res2").DrivenByPort.InputSignals[0].DrivenByPort.Entity.EntityId.ToString(),"05"); p.Interpret("define architecture TestArch Test { y <- x * sin(c) +w; };"); Assert.IsTrue(l.ContainsEntity(new MathIdentifier("Test", "Work")),"06"); s.LookupNamedSignal("a").PostNewValue(new RealValue(0.25)); s.LookupNamedSignal("b").PostNewValue(new RealValue(0.75)); p.SimulateInstant(); Signal res1 = s.LookupNamedSignal("res1"); Signal res2 = s.LookupNamedSignal("res2"); Assert.AreEqual("Work.TestArch", res1.DrivenByPort.CurrentArchitecture.ArchitectureId.ToString()); Assert.AreEqual("Work.TestArch", res2.DrivenByPort.CurrentArchitecture.ArchitectureId.ToString()); Assert.AreEqual(0.1466, Math.Round(RealValue.ConvertFrom(res1.Value).Value, 4)); Assert.AreEqual(0.2278, Math.Round(RealValue.ConvertFrom(res2.Value).Value, 4)); }
public void SystemToSystemCloneTest() { Project p = new Project(); MathSystem s1 = p.CurrentSystem; // BUILD SYSTEM 1: sin(x^2) Signal x = Binder.CreateSignal(); x.Label = "x"; Std.ConstrainAlwaysReal(x); Signal x2 = StdBuilder.Square(x); x2.Label = "x2"; Signal sinx2 = StdBuilder.Sine(x2); sinx2.Label = "sinx2"; Signal sinx2t2 = sinx2 * IntegerValue.ConstantTwo; s1.AddSignalTree(sinx2t2, true, true); // EVALUATE SYSTEM 1 FOR x=1.5 x.PostNewValue(new RealValue(1.5)); p.SimulateInstant(); Assert.AreEqual(0, s1.BusCount, "A0"); Assert.AreEqual(5, s1.SignalCount, "A1"); Assert.AreEqual(3, s1.PortCount, "A2"); Assert.AreEqual("Std.Real(1.55614639377584)", sinx2t2.Value.ToString(), "A3"); // CLONE SYSTEM 1 TO SYSTEM 2 /* * HINT: would be simpler to just call: * MathSystem s2 = s1.Clone(); */ SystemWriter writer = new SystemWriter(); SystemReader reader = new SystemReader(writer); reader.ReadSystem(s1); IMathSystem s2 = writer.WrittenSystems.Dequeue(); Assert.AreEqual(0, s2.BusCount, "B0"); Assert.AreEqual(5, s2.SignalCount, "B1"); Assert.AreEqual(3, s2.PortCount, "B2"); Assert.AreEqual("Std.Real(1.55614639377584)", s2.GetOutput(0).Value.ToString(), "B3"); // EVALUATE SYSTEM 2 FOR x=2.5 s2.GetInput(0).PostNewValue(new RealValue(2.5)); p.SimulateInstant(); Assert.AreEqual("Std.Real(-0.0663584330951136)", s2.GetOutput(0).Value.ToString(), "C0"); // CHECK SYSTEM 1 STILL ON x=1.5 Assert.AreEqual("Std.Real(1.5)", x.Value.ToString(), "D0"); Assert.AreEqual("Std.Real(1.55614639377584)", sinx2t2.Value.ToString(), "D1"); }
public void SystemToXmlSerializeTest() { Project p = new Project(); MathSystem s1 = p.CurrentSystem; // BUILD SYSTEM 1: sin(x^2)*2 Signal x = Binder.CreateSignal(); x.Label = "x"; Std.ConstrainAlwaysReal(x); Signal x2 = StdBuilder.Square(x); x2.Label = "x2"; Signal sinx2 = StdBuilder.Sine(x2); sinx2.Label = "sinx2"; Signal sinx2t2 = sinx2 * IntegerValue.ConstantTwo; s1.AddSignalTree(sinx2t2, true, true); // EVALUATE SYSTEM 1 FOR x=1.5 x.PostNewValue(new RealValue(1.5)); p.SimulateInstant(); Assert.AreEqual(0, s1.BusCount, "A0"); Assert.AreEqual(5, s1.SignalCount, "A1"); Assert.AreEqual(3, s1.PortCount, "A2"); Assert.AreEqual("Std.Real(1.55614639377584)", sinx2t2.Value.ToString(), "A3"); // SERIALIZE SYSTEM 1 TO XML /* * HINT: would be simpler to just call: * string s2xml = s1.WriteXml(false); */ StringBuilder sb = new StringBuilder(); { XmlWriterSettings settings = new XmlWriterSettings(); settings.ConformanceLevel = ConformanceLevel.Document; settings.OmitXmlDeclaration = false; settings.Indent = true; settings.NewLineHandling = NewLineHandling.Entitize; settings.Encoding = Config.InternalEncoding; XmlWriter xwriter = XmlWriter.Create(sb, settings); xwriter.WriteStartElement("Systems"); XmlSystemWriter writer = new XmlSystemWriter(xwriter); SystemReader reader = new SystemReader(writer); reader.ReadSystem(s1); xwriter.WriteEndElement(); xwriter.Flush(); xwriter.Close(); } string s2xml = sb.ToString(); Console.WriteLine(s2xml); // READER XML BACK TO SYSTEM 2 /* * HINT: would be simpler to just call: * MathSystem s2 = MathSystem.ReadXml(s2xml, c); */ IMathSystem s2; { StringReader sr = new StringReader(s2xml); XmlReader xreader = XmlReader.Create(sr); xreader.ReadToFollowing("Systems"); xreader.Read(); SystemWriter writer = new SystemWriter(); XmlSystemReader reader = new XmlSystemReader(writer); reader.ReadSystems(xreader, false); xreader.ReadEndElement(); s2 = writer.WrittenSystems.Dequeue(); } Assert.AreEqual(0, s2.BusCount, "B0"); Assert.AreEqual(5, s2.SignalCount, "B1"); Assert.AreEqual(3, s2.PortCount, "B2"); Assert.AreEqual("Std.Real(1.55614639377584)", s2.GetOutput(0).Value.ToString(), "B3"); // EVALUATE SYSTEM 2 FOR x=2.5 s2.GetInput(0).PostNewValue(new RealValue(2.5)); p.SimulateInstant(); Assert.AreEqual("Std.Real(-0.0663584330951136)", s2.GetOutput(0).Value.ToString(), "C0"); //-0.0331792165475568 }