public void CloneTest()
        {
            var source = new FourInOneOutExpression();
            source.ExpressionName = "source";
            source.FunctionName = "func";
            source.Width = 1;
            source.Height = 2;
            source.Top = 3;
            source.Left = 4;
            source.Connector1In.Name = "1";
            source.Connector2In.Name = "2";
            source.Connector3In.Name = "3";
            source.Connector4In.Name = "4";
            source.ConnectorOut.Name = "5";

            var cloneTo = (FourInOneOutExpression)source.Clone();
            Assert.AreEqual(source.ExpressionName, cloneTo.ExpressionName);
            Assert.AreEqual(source.FunctionName, cloneTo.FunctionName);
            Assert.AreEqual(source.Width, cloneTo.Width);
            Assert.AreEqual(source.Height, cloneTo.Height);
            Assert.AreEqual(source.Top, cloneTo.Top);
            Assert.AreEqual(source.Left, cloneTo.Left);

            Assert.AreNotEqual(source.Id, cloneTo.Id);
            Assert.AreNotEqual(source.Connector1In.Id, cloneTo.Connector1In.Id);
            Assert.AreNotEqual(source.Connector2In.Id, cloneTo.Connector2In.Id);
            Assert.AreNotEqual(source.Connector3In.Id, cloneTo.Connector3In.Id);
            Assert.AreNotEqual(source.Connector4In.Id, cloneTo.Connector4In.Id);
            Assert.AreNotEqual(source.ConnectorOut.Id, cloneTo.ConnectorOut.Id);

            Assert.AreEqual(source.Connector1In.Name, cloneTo.Connector1In.Name);
            Assert.AreEqual(source.Connector2In.Name, cloneTo.Connector2In.Name);
            Assert.AreEqual(source.Connector3In.Name, cloneTo.Connector3In.Name);
            Assert.AreEqual(source.Connector4In.Name, cloneTo.Connector4In.Name);
            Assert.AreEqual(source.ConnectorOut.Name, cloneTo.ConnectorOut.Name);
        }