示例#1
0
        public void CreateDifferentPartial()
        {
            var _ = AbstractCallable._;

            Helper.RunWithMultipleSimulators((s) =>
            {
                {
                    var gen     = new GenericCallable(s, typeof(Gen1 <,>));
                    var partial = gen.Partial(_);
                    Assert.Equal(typeof(GenericPartial), partial.GetType());
                }

                {
                    var closed  = new Gen1 <long, bool>(s);
                    var partial = closed.Partial <ICallable>(_);
                    Assert.Equal(typeof(OperationPartial <(long, bool), (long, bool), bool>), partial.GetType());
                }

                {
                    var closed  = new Gen1 <(long, long), bool>(s);
                    var partial = closed.Partial <ICallable>(((3L, _), true));
                    Assert.Equal(typeof(OperationPartial <long, ((long, long), bool), bool>), partial.GetType());
                }

                {
                    var x       = s.Get <IUnitary <Qubit>, Intrinsic.X>();
                    var closed  = new Gen1 <(long, (IUnitary, Qubit, Result)), bool>(s);
                    var partial = closed.Partial <ICallable>(((_, (x, _, _)), true));
                    Assert.Equal(typeof(OperationPartial <(long, (Qubit, Result)), ((long, (IUnitary, Qubit, Result)), bool), bool>), partial.GetType());
                }

                {
                    var x       = s.Get <IUnitary <Qubit>, Intrinsic.X>();
                    var closed  = new Gen1 <(long, (IUnitary, Qubit, Result)), bool>(s) as ICallable <((long, (IUnitary, Qubit, Result)), bool), bool>;
                    var partial = closed.Partial(((_, (x, _, _)), false));
                    Assert.Equal(typeof(OperationPartial <(long, (Qubit, Result)), ((long, (IUnitary, Qubit, Result)), bool), bool>), partial.GetType());
                }

                {
                    var closed  = new Gen2 <(long, bool, Result), IUnitary>(s);
                    var partial = closed.Partial <IAdjointable>(((_, true, _), 3L, _));
                    Assert.Equal(typeof(OperationPartial <((long, Result), IUnitary), ((long, bool, Result), long, IUnitary), QVoid>), partial.GetType());
                }

                {
                    var closed  = new Gen2 <bool, Result>(s) as IAdjointable <(bool, long, Result)>;
                    var partial = closed.Partial((_, 3L, Result.Zero));
                    Assert.Equal(typeof(OperationPartial <bool, (bool, long, Result), QVoid>), partial.GetType());
                }

                {
                    var closed  = new Gen4 <bool, bool>(s) as IUnitary <(Result, (bool, bool), Result)>;
                    var partial = closed.Controlled.Partial((_, (_, (true, _), Result.Zero)));
                    Assert.Equal(typeof(OperationPartial <(IQArray <Qubit>, (Result, bool)), (IQArray <Qubit>, (Result, (bool, bool), Result)), QVoid>), partial.GetType());
                }

                {
                    var closed  = new Gen4 <bool, bool>(s) as IControllable <(Result, (bool, bool), Result)>;
                    var partial = closed.Controlled.Partial((_, (_, (true, _), Result.Zero)));
                    Assert.Equal(typeof(OperationPartial <(IQArray <Qubit>, (Result, bool)), (IQArray <Qubit>, (Result, (bool, bool), Result)), QVoid>), partial.GetType());
                }

                {
                    var closed  = new Gen2 <bool, Result>(s) as IAdjointable;
                    var partial = closed.Partial((_, 3L, Result.Zero));
                    Assert.Equal(typeof(OperationPartial <bool, (bool, long, Result), QVoid>), partial.GetType());
                }

                {
                    var closed  = new Gen4 <bool, bool>(s) as IUnitary;
                    var partial = closed.Adjoint.Controlled.Partial((_, (_, (true, _), Result.Zero)));
                    Assert.Equal(typeof(OperationPartial <(IQArray <Qubit>, (Result, bool)), (IQArray <Qubit>, (Result, (bool, bool), Result)), QVoid>), partial.GetType());
                }

                {
                    var closed  = new Gen4 <bool, bool>(s) as IControllable;
                    var partial = closed.Controlled.Partial((_, (_, (true, _), Result.Zero)));
                    Assert.Equal(typeof(OperationPartial <(IQArray <Qubit>, (Result, bool)), (IQArray <Qubit>, (Result, (bool, bool), Result)), QVoid>), partial.GetType());
                }
            });
        }