public void TargetsEquality()
        {
            var a = new RuntimeMetadata()
            {
                Targets = new List <Qubit>()
                {
                },
            };
            var b = new RuntimeMetadata()
            {
                Targets = new List <Qubit>()
                {
                },
            };

            Assert.Equal(a, b);
            Assert.Equal(a.GetHashCode(), b.GetHashCode());

            b.Targets = new List <Qubit>()
            {
                new FreeQubit(1)
            };
            Assert.NotEqual(a, b);
            Assert.NotEqual(a.GetHashCode(), b.GetHashCode());

            a.Targets = new List <Qubit>()
            {
                new FreeQubit(1)
            };
            Assert.Equal(a, b);
            Assert.Equal(a.GetHashCode(), b.GetHashCode());
        }
        public void CheckEquality()
        {
            var a = new RuntimeMetadata()
            {
                Label = "H",
                FormattedNonQubitArgs = "",
                IsAdjoint             = false,
                IsControlled          = false,
                IsMeasurement         = false,
                IsComposite           = false,
                Children = null,
                Controls = new List <Qubit>()
                {
                },
                Targets = new List <Qubit>()
                {
                },
            };
            var b = new RuntimeMetadata()
            {
                Label = "H",
                FormattedNonQubitArgs = "",
                IsAdjoint             = false,
                IsControlled          = false,
                IsMeasurement         = false,
                IsComposite           = false,
                Children = null,
                Controls = new List <Qubit>()
                {
                },
                Targets = new List <Qubit>()
                {
                },
            };

            Assert.Equal(a, b);
            Assert.Equal(a.GetHashCode(), b.GetHashCode());

            b.Label = "X";
            Assert.NotEqual(a, b);
            Assert.NotEqual(a.GetHashCode(), b.GetHashCode());
            b.Label = "H";

            b.FormattedNonQubitArgs = "(1)";
            Assert.NotEqual(a, b);
            Assert.NotEqual(a.GetHashCode(), b.GetHashCode());
            b.FormattedNonQubitArgs = "";

            b.IsAdjoint = true;
            Assert.NotEqual(a, b);
            Assert.NotEqual(a.GetHashCode(), b.GetHashCode());
            b.IsAdjoint = false;

            b.IsControlled = true;
            Assert.NotEqual(a, b);
            Assert.NotEqual(a.GetHashCode(), b.GetHashCode());
            b.IsControlled = false;

            b.IsMeasurement = true;
            Assert.NotEqual(a, b);
            Assert.NotEqual(a.GetHashCode(), b.GetHashCode());
            b.IsMeasurement = false;

            b.IsComposite = true;
            Assert.NotEqual(a, b);
            Assert.NotEqual(a.GetHashCode(), b.GetHashCode());
            b.IsComposite = false;
        }
        public void ChildrenEquality()
        {
            var a = new RuntimeMetadata()
            {
                Children = new[]
                {
                    new List <RuntimeMetadata>(),
                    new List <RuntimeMetadata>(),
                },
            };
            var b = new RuntimeMetadata()
            {
                Children = new[]
                {
                    new List <RuntimeMetadata>(),
                    new List <RuntimeMetadata>(),
                },
            };

            Assert.Equal(a, b);
            Assert.Equal(a.GetHashCode(), b.GetHashCode());

            var aChildren = a.Children.ToList();

            aChildren[0] = new List <RuntimeMetadata>()
            {
                new RuntimeMetadata()
                {
                    Label = "H"
                }
            };
            a.Children = aChildren;
            Assert.NotEqual(a, b);
            Assert.NotEqual(a.GetHashCode(), b.GetHashCode());

            var bChildren = b.Children.ToList();

            bChildren[0] = new List <RuntimeMetadata>()
            {
                new RuntimeMetadata()
                {
                    Label = "X"
                }
            };
            b.Children = bChildren;
            Assert.NotEqual(a, b);
            Assert.NotEqual(a.GetHashCode(), b.GetHashCode());

            bChildren[0] = new List <RuntimeMetadata>()
            {
                new RuntimeMetadata()
                {
                    Label = "H"
                }
            };
            Assert.Equal(a, b);
            Assert.Equal(a.GetHashCode(), b.GetHashCode());

            b.Children = b.Children.SkipLast(1);
            Assert.NotEqual(a, b);
            Assert.NotEqual(a.GetHashCode(), b.GetHashCode());
        }