From 50319d9a6a9500ec6a53ca306bee6bb588988878 Mon Sep 17 00:00:00 2001 From: filipw Date: Fri, 19 Jan 2024 15:38:48 +0100 Subject: [PATCH 1/3] added BoolArrayAsBigInt function --- library/std/convert.qs | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/library/std/convert.qs b/library/std/convert.qs index 49b7ab90f4..0f75aeb1f6 100644 --- a/library/std/convert.qs +++ b/library/std/convert.qs @@ -97,6 +97,32 @@ namespace Microsoft.Quantum.Convert { result } + /// # Summary + /// Converts an array of Boolean values into a non-negative BigInt, interpreting the + /// array as a binary representation in little-endian format. + /// + /// # Input + /// ## boolArray + /// An array of Boolean values representing the binary digits of a BigInt. + /// + /// # Output + /// A BigInt represented by `boolArray`. + /// + /// # Remarks + /// The function interprets the array in little-endian format, where the first + /// element of the array represents the least significant bit. + /// The input `boolArray` should not be empty. + function BoolArrayAsBigInt(boolArray : Bool[]) : BigInt { + mutable result = 0L; + for i in 0..Length(boolArray) - 1 { + if boolArray[i] { + set result += 1L <<< i; + } + } + + result + } + /// # Summary /// Produces a binary representation of a non-negative BigInt, using the /// little-endian representation for the returned array. From 691864da07e0f57085b192e3139f812786f1e26b Mon Sep 17 00:00:00 2001 From: filipw Date: Fri, 19 Jan 2024 15:39:05 +0100 Subject: [PATCH 2/3] added tests for BoolArrayAsBigInt and BigIntAsBoolArray --- library/src/tests/convert.rs | 150 ++++++++++++++++++++++++++++++++++- 1 file changed, 149 insertions(+), 1 deletion(-) diff --git a/library/src/tests/convert.rs b/library/src/tests/convert.rs index a194e78f79..c526e9ab96 100644 --- a/library/src/tests/convert.rs +++ b/library/src/tests/convert.rs @@ -1,6 +1,6 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. - +#![allow(clippy::too_many_lines)] use super::test_expression; use qsc::interpret::Value; @@ -30,6 +30,154 @@ fn check_int_as_bool_array() { ); } +#[test] +fn check_bigint_as_bool_array() { + test_expression( + "Microsoft.Quantum.Convert.BigIntAsBoolArray(18446744073709551616L, 128)", // note: 18446744073709551616L == 2^64 + &Value::Array( + vec![ + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(true), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + Value::Bool(false), + ] + .into(), + ), + ); +} + +#[test] +fn check_bool_array_as_big_int() { + test_expression( + "Microsoft.Quantum.Convert.BoolArrayAsBigInt([false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false])", + &Value::BigInt(18_446_744_073_709_551_616_u128.into()), + ); +} + #[test] fn check_result_array_as_int() { test_expression( From 05fb51718189728ae6a7c588deaa3ce6dd0a50df Mon Sep 17 00:00:00 2001 From: filipw Date: Mon, 22 Jan 2024 17:13:38 +0100 Subject: [PATCH 3/3] await on create comment --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e551c0467c..04e8bbe0f8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -189,7 +189,7 @@ jobs: script: | if (${{ env.BRANCH_MEASUREMENT }} !== ${{ env.MAIN_MEASUREMENT }}) { try { - github.rest.issues.createComment({ + await github.rest.issues.createComment({ issue_number: context.issue.number, owner: context.repo.owner, repo: context.repo.repo,