From 6a6394767773e3db948815483a88e6f46df315e9 Mon Sep 17 00:00:00 2001 From: Martun Karapetyan Date: Fri, 6 Dec 2024 12:07:44 +0400 Subject: [PATCH] Fix row selector. --- .../nil/blueprint/bbf/row_selector.hpp | 6 ++- crypto3/libs/blueprint/test/CMakeLists.txt | 1 + .../blueprint/test/bbf/row_seletor_test.cpp | 48 +++++++++++++++++++ 3 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 crypto3/libs/blueprint/test/bbf/row_seletor_test.cpp diff --git a/crypto3/libs/blueprint/include/nil/blueprint/bbf/row_selector.hpp b/crypto3/libs/blueprint/include/nil/blueprint/bbf/row_selector.hpp index b150e24351..2586f0c41b 100644 --- a/crypto3/libs/blueprint/include/nil/blueprint/bbf/row_selector.hpp +++ b/crypto3/libs/blueprint/include/nil/blueprint/bbf/row_selector.hpp @@ -79,7 +79,11 @@ namespace nil { using iterator_category = std::forward_iterator_tag; const_iterator(const BitSet& v, size_t pos) - : bitset(v), index(bitset.find_next(pos)) { + : bitset(v) { + if (pos < bitset.size() && bitset[pos]) + index = pos; + else + index = bitset.find_next(pos); } // Dereference operator returns the current index diff --git a/crypto3/libs/blueprint/test/CMakeLists.txt b/crypto3/libs/blueprint/test/CMakeLists.txt index fb42cdb663..18a4b9e60c 100644 --- a/crypto3/libs/blueprint/test/CMakeLists.txt +++ b/crypto3/libs/blueprint/test/CMakeLists.txt @@ -92,6 +92,7 @@ set(COMMON_TEST_FILES "component_batch" "bbf/bbf_wrapper" "bbf/opcode_poc" + "bbf/row_seletor_test" ) set(NON_NATIVE_TESTS_FILES diff --git a/crypto3/libs/blueprint/test/bbf/row_seletor_test.cpp b/crypto3/libs/blueprint/test/bbf/row_seletor_test.cpp new file mode 100644 index 0000000000..4ae769a76f --- /dev/null +++ b/crypto3/libs/blueprint/test/bbf/row_seletor_test.cpp @@ -0,0 +1,48 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Martun Karapetyan +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#define BOOST_TEST_MODULE blueprint_plonk_bbf_row_selector_test + +#include + +#include + +using namespace nil::blueprint; + +BOOST_AUTO_TEST_SUITE(blueprint_bbf_row_selector_test) + +BOOST_AUTO_TEST_CASE(blueprint_plonk_bbf_row_selector_test) { + size_t max_rows = 10; + bbf::row_selector<> r(max_rows); + r.set_row(0); + r.set_row(2); + r.set_row(5); + std::vector v(r.begin(), r.end()); + std::vector expected = {0, 2, 5}; + BOOST_CHECK_EQUAL_COLLECTIONS( + v.begin(), v.end(), + expected.begin(), expected.end()); +} + +BOOST_AUTO_TEST_SUITE_END()