diff --git a/src/Simulation/TargetDefinitions/Decompositions/ResultArrayAsInt.qs b/src/Simulation/TargetDefinitions/Decompositions/ResultArrayAsInt.qs new file mode 100644 index 00000000000..8866ca3efb9 --- /dev/null +++ b/src/Simulation/TargetDefinitions/Decompositions/ResultArrayAsInt.qs @@ -0,0 +1,18 @@ +namespace Microsoft.Quantum.Convert { + open Microsoft.Quantum.Arrays; + + /// # Summary + /// Produces a non-negative integer from a string of Results in little endian format. + /// + /// # Input + /// ## results + /// Results in binary representation of number. + function ResultArrayAsInt(results : Result[]) : Int { + mutable val = 0; + for i in IndexRange(results) { + set val += results[i] == One ? 2 ^ i | 0; + } + return val; + } + +} diff --git a/src/Simulation/TargetDefinitions/TargetPackages/Type1.Package.props b/src/Simulation/TargetDefinitions/TargetPackages/Type1.Package.props index 3e1a7bea05a..a0f303637d0 100644 --- a/src/Simulation/TargetDefinitions/TargetPackages/Type1.Package.props +++ b/src/Simulation/TargetDefinitions/TargetPackages/Type1.Package.props @@ -45,6 +45,7 @@ + diff --git a/src/Simulation/TargetDefinitions/TargetPackages/Type2.Package.props b/src/Simulation/TargetDefinitions/TargetPackages/Type2.Package.props index 591fcb40a0f..4e03abbaf1b 100644 --- a/src/Simulation/TargetDefinitions/TargetPackages/Type2.Package.props +++ b/src/Simulation/TargetDefinitions/TargetPackages/Type2.Package.props @@ -40,6 +40,7 @@ + diff --git a/src/Simulation/TargetDefinitions/TargetPackages/Type3.Package.props b/src/Simulation/TargetDefinitions/TargetPackages/Type3.Package.props index fae38c8e979..a6816ffcc92 100644 --- a/src/Simulation/TargetDefinitions/TargetPackages/Type3.Package.props +++ b/src/Simulation/TargetDefinitions/TargetPackages/Type3.Package.props @@ -46,6 +46,7 @@ + diff --git a/src/Simulation/TargetDefinitions/TargetPackages/Type4.Package.props b/src/Simulation/TargetDefinitions/TargetPackages/Type4.Package.props index d3956fc54d8..821176af1fe 100644 --- a/src/Simulation/TargetDefinitions/TargetPackages/Type4.Package.props +++ b/src/Simulation/TargetDefinitions/TargetPackages/Type4.Package.props @@ -46,6 +46,7 @@ + diff --git a/src/Simulation/TargetDefinitions/Tests/Tests.TargetDefinitions.csproj b/src/Simulation/TargetDefinitions/Tests/Tests.TargetDefinitions.csproj index 3d504cfbde2..5f52f6b398e 100644 --- a/src/Simulation/TargetDefinitions/Tests/Tests.TargetDefinitions.csproj +++ b/src/Simulation/TargetDefinitions/Tests/Tests.TargetDefinitions.csproj @@ -40,6 +40,7 @@ + diff --git a/src/Simulation/TargetDefinitions/Tests/UtilitiesTest.qs b/src/Simulation/TargetDefinitions/Tests/UtilitiesTest.qs new file mode 100644 index 00000000000..45fab230568 --- /dev/null +++ b/src/Simulation/TargetDefinitions/Tests/UtilitiesTest.qs @@ -0,0 +1,16 @@ +namespace UtilitiesTests { + open Microsoft.Quantum.Convert; + open Microsoft.Quantum.Diagnostics; + + @Test("SparseSimulator") + operation VerifyResultArrayAsInt() : Unit { + Fact(ResultArrayAsInt([Zero, Zero, Zero]) == 0, "ResultArrayAsInt of 0 value should work"); + Fact(ResultArrayAsInt([One, Zero, Zero]) == 1, "ResultArrayAsInt of 1 value should work"); + Fact(ResultArrayAsInt([Zero, One, Zero]) == 2, "ResultArrayAsInt of 2 value should work"); + Fact(ResultArrayAsInt([One, One, Zero]) == 3, "ResultArrayAsInt of 3 value should work"); + Fact(ResultArrayAsInt([Zero, Zero, One]) == 4, "ResultArrayAsInt of 4 value should work"); + Fact(ResultArrayAsInt([One, Zero, One]) == 5, "ResultArrayAsInt of 5 value should work"); + Fact(ResultArrayAsInt([Zero, One, One]) == 6, "ResultArrayAsInt of 6 value should work"); + Fact(ResultArrayAsInt([One, One, One]) == 7, "ResultArrayAsInt of 7 value should work"); + } +} \ No newline at end of file