public void PartialRy()
        {
            var target = new FreeQubit(0);
            var op     = new QuantumSimulator().Get <Intrinsic.Ry>().Partial((double d) =>
                                                                             new ValueTuple <double, Qubit>(d, target));
            var args     = op.__dataIn(2.1);
            var expected = new RuntimeMetadata()
            {
                Label = "Ry",
                FormattedNonQubitArgs = "(2.1)",
                IsAdjoint             = false,
                IsControlled          = false,
                IsMeasurement         = false,
                IsComposite           = false,
                Children = null,
                Controls = new List <Qubit>()
                {
                },
                Targets = new List <Qubit>()
                {
                    target
                },
            };

            Assert.Equal(op.GetRuntimeMetadata(args), expected);
        }
        public void AdjointAdjointH()
        {
            Qubit target   = new FreeQubit(0);
            var   op       = new QuantumSimulator().Get <Intrinsic.H>().Adjoint.Adjoint;
            var   args     = op.__dataIn(target);
            var   expected = new RuntimeMetadata()
            {
                Label = "H",
                FormattedNonQubitArgs = "",
                IsAdjoint             = false,
                IsControlled          = false,
                IsMeasurement         = false,
                IsComposite           = false,
                Children = null,
                Controls = new List <Qubit>()
                {
                },
                Targets = new List <Qubit>()
                {
                    target
                },
            };

            Assert.Equal(op.GetRuntimeMetadata(args), expected);
        }
        public void MResetZ()
        {
            var measureQubit = new FreeQubit(0);
            var op           = new QuantumSimulator().Get <Measurement.MResetZ>();
            var args         = op.__dataIn(measureQubit);
            var expected     = new RuntimeMetadata()
            {
                Label = "MResetZ",
                FormattedNonQubitArgs = "",
                IsAdjoint             = false,
                IsControlled          = false,
                IsMeasurement         = true,
                IsComposite           = false,
                Children = null,
                Controls = new List <Qubit>()
                {
                },
                Targets = new List <Qubit>()
                {
                    measureQubit
                },
            };

            Assert.Equal(op.GetRuntimeMetadata(args), expected);
        }
        public void ResetAll()
        {
            IQArray <Qubit> targets  = new QArray <Qubit>(new[] { new FreeQubit(0) });
            var             op       = new QuantumSimulator().Get <Intrinsic.ResetAll>();
            var             args     = op.__dataIn(targets);
            var             expected = new RuntimeMetadata()
            {
                Label = "ResetAll",
                FormattedNonQubitArgs = "",
                IsAdjoint             = false,
                IsControlled          = false,
                IsMeasurement         = false,
                IsComposite           = true,
                Children = null,
                Controls = new List <Qubit>()
                {
                },
                Targets = targets,
            };

            Assert.Equal(op.GetRuntimeMetadata(args), expected);
        }
        public void NestedOperation()
        {
            var op       = new QuantumSimulator().Get <Circuits.NestedOp>();
            var args     = op.__dataIn(QVoid.Instance);
            var expected = new RuntimeMetadata()
            {
                Label = "NestedOp",
                FormattedNonQubitArgs = "",
                IsAdjoint             = false,
                IsControlled          = false,
                IsMeasurement         = false,
                IsComposite           = false,
                Children = null,
                Controls = new List <Qubit>()
                {
                },
                Targets = new List <Qubit>()
                {
                },
            };

            Assert.Equal(op.GetRuntimeMetadata(args), expected);
        }