public void Parser_SimpleExpressions() { Project p = new Project(); // TODO: UNCOMMENT //LogObserver lo = new LogObserver(new TextLogWriter(Console.Out)); //p.AttachLocalObserver(lo); MathSystem s = p.CurrentSystem; Assert.AreEqual(0, s.SignalCount, "0"); p.Interpret("signal x;"); Assert.AreEqual(1, s.SignalCount, "A1"); Assert.IsTrue(s.ContainsNamedSignal("x"), "A2"); p.Interpret("x"); Assert.AreEqual(1, s.SignalCount, "B1"); p.Interpret("y <- x^2"); Assert.AreEqual(3, s.SignalCount, "C1"); Assert.AreEqual("Std.Power", s.LookupNamedSignal("y").DrivenByPort.Entity.EntityId.ToString(), "C2"); Assert.AreEqual("x", s.LookupNamedSignal("y").DrivenByPort.InputSignals[0].Label, "C3"); Assert.AreEqual("Std.Integer(2)", s.LookupNamedSignal("y").DrivenByPort.InputSignals[1].Value.ToString(), "C4"); p.Interpret("instantiate + in a,b out c;"); Assert.AreEqual(6, s.SignalCount, "D1"); Assert.AreEqual("Std.Add", s.LookupNamedSignal("c").DrivenByPort.Entity.EntityId.ToString(), "D2"); Assert.AreEqual("a", s.LookupNamedSignal("c").DrivenByPort.InputSignals[0].Label, "D3"); Assert.AreEqual("b", s.LookupNamedSignal("c").DrivenByPort.InputSignals[1].Label, "D4"); p.Interpret("d <- diff(a*b,a);"); Assert.AreEqual(8, s.SignalCount, "E1"); Assert.AreEqual("Std.Derive", s.LookupNamedSignal("d").DrivenByPort.Entity.EntityId.ToString(), "E2"); Assert.AreEqual("Std.Multiply", s.LookupNamedSignal("d").DrivenByPort.InputSignals[0].DrivenByPort.Entity.EntityId.ToString(), "E3"); Assert.AreEqual("a", s.LookupNamedSignal("d").DrivenByPort.InputSignals[1].Label, "E4"); }
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)); }