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()); } }); }