Skip to content
This repository was archived by the owner on Jan 12, 2024. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 10 additions & 10 deletions src/Simulation/CsharpGeneration.Tests/SimulationCodeTests.fs
Original file line number Diff line number Diff line change
Expand Up @@ -1242,7 +1242,7 @@ namespace N1

"X.Apply(qubits.Data[0L]);"
"X.Adjoint.Apply(qubits.Data[0L]);"
"X.Controlled.Apply((qubits.Data?.Slice(new QRange(1L,5L)), qubits.Data[0L]));"
"X.Controlled.Apply((qubits.Data.Slice(new QRange(1L,5L)), qubits.Data[0L]));"

"call_target1.Apply((1L, X, X, X, X));"
"call_target1.Apply((1L, plain.Data, adj.Data, ctr.Data, uni.Data));"
Expand Down Expand Up @@ -1820,16 +1820,16 @@ namespace N1
"var r5 = (IQArray<Result>)QArray<Result>.Create((4L + 2L));"
"var r6 = QArray<Pauli>.Create(r5.Length);"
"var r7 = (IQArray<Int64>)QArray<Int64>.Add(r2, r4);"
"var r8 = (IQArray<Int64>)r7?.Slice(new QRange(1L, 5L, 10L));"
"var r8 = (IQArray<Int64>)r7.Slice(new QRange(1L, 5L, 10L));"

"var r9 = new arrays_T1(new QArray<Pauli>(Pauli.PauliX, Pauli.PauliY));"
"var r10 = (IQArray<arrays_T1>)QArray<arrays_T1>.Create(4L);"
"var r11 = new arrays_T2((new QArray<Pauli>(Pauli.PauliZ), new QArray<Int64>(4L)));"
"var r12 = (IQArray<arrays_T2>)QArray<arrays_T2>.Create(r10.Length);"
"var r13 = new arrays_T3(new QArray<IQArray<Result>>(new QArray<Result>(Result.Zero, Result.One), new QArray<Result>(Result.One, Result.Zero)));"
"var r14 = (IQArray<Qubit>)QArray<Qubit>.Add(qubits, register.Data);"
"var r15 = (IQArray<Qubit>)register.Data?.Slice(new QRange(0L, 2L));"
"var r16 = (IQArray<Qubit>)qubits?.Slice(new QRange(1L, -(1L)));"
"var r15 = (IQArray<Qubit>)register.Data.Slice(new QRange(0L, 2L));"
"var r16 = (IQArray<Qubit>)qubits.Slice(new QRange(1L, -(1L)));"
"var r18 = (IQArray<Qubits>)QArray<Qubits>.Create(2L);"
"var r19 = (IQArray<Microsoft.Quantum.Overrides.udt0>)QArray<Microsoft.Quantum.Overrides.udt0>.Create(7L);"
"var i0 = r13.Data[0L][1L];"
Expand Down Expand Up @@ -1860,12 +1860,12 @@ namespace N1
"var r2 = new QRange(10L,-(2L),0L);"
"var ranges = (IQArray<QRange>)QArray<QRange>.Create(1L);"

"var s1 = (IQArray<Qubit>)qubits?.Slice(new QRange(0L,10L));"
"var s2 = (IQArray<Qubit>)qubits?.Slice(r2);"
"var s3 = (IQArray<Qubit>)qubits?.Slice(ranges[3L]);"
"var s4 = (IQArray<Qubit>)qubits?.Slice(GetMeARange.Apply(QVoid.Instance));"
"var s1 = (IQArray<Qubit>)qubits.Slice(new QRange(0L,10L));"
"var s2 = (IQArray<Qubit>)qubits.Slice(r2);"
"var s3 = (IQArray<Qubit>)qubits.Slice(ranges[3L]);"
"var s4 = (IQArray<Qubit>)qubits.Slice(GetMeARange.Apply(QVoid.Instance));"

"return qubits?.Slice(new QRange(10L,-(3L),0L));"
"return qubits.Slice(new QRange(10L,-(3L),0L));"
]
|> testOneBody (applyVisitor sliceOperations)

Expand Down Expand Up @@ -3529,7 +3529,7 @@ namespace Microsoft.Quantum.Tests.LineNumbers
else
{
#line 20 "%%"
foreach (var c in ctrls?.Slice(new QRange(0L, 2L, r)))
foreach (var c in ctrls.Slice(new QRange(0L, 2L, r)))
#line hidden
{
#line 21 "%%"
Expand Down
2 changes: 1 addition & 1 deletion src/Simulation/CsharpGeneration/SimulationCode.fs
Original file line number Diff line number Diff line change
Expand Up @@ -561,7 +561,7 @@ module SimulationCode =

and buildArrayItem a i =
match i.ResolvedType.Resolution with
| Range -> ``invoke`` ((buildExpression a) <|?.|> (``ident`` "Slice")) ``(`` [ (buildExpression i) ] ``)``
| Range -> ``invoke`` ((buildExpression a) <|.|> (``ident`` "Slice")) ``(`` [ (buildExpression i) ] ``)``
| _ -> ``item`` (buildExpression a) [ (buildExpression i) ]

let buildBlock (block : QsScope) =
Expand Down
25 changes: 25 additions & 0 deletions src/Simulation/Simulators.Tests/Circuits/Issue132.qs
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.

namespace Microsoft.Quantum.Simulation.Simulators.Tests.Circuits
{
open Microsoft.Quantum.Intrinsic;

operation SliceGenerationTest() : Unit {
using (qs = Qubit[4]) {
PrepareCatState(qs);
if (M(qs[0]) == One) {
for (target in qs) {
X(target);
}
}
}
}

operation PrepareCatState(register : Qubit[]) : Unit is Adj + Ctl {
H(register[0]);
for (target in register[1...]) {
CNOT(register[0], target);
}
}
}