/* Copyright 2025 Joaquin M Lopez Munoz. * Distributed under the Boost Software License, Version 1.0. * (See accompanying file LICENSE_1_0.txt or copy at * http://www.boost.org/LICENSE_1_0.txt) * * See https://www.boost.org/libs/bloom for library home page. */ #include #include #include #include #include "test_types.hpp" #include "test_utilities.hpp" using namespace test_utilities; template struct multiarg_constructed { multiarg_constructed()=default; template multiarg_constructed(Arg1&& arg,Arg2&&,Args&&...): x{std::forward(arg)}{} multiarg_constructed(const multiarg_constructed&)=delete; multiarg_constructed(multiarg_constructed&&)=delete; multiarg_constructed& operator=(const multiarg_constructed&)=default; operator const T&()const{return x;} T x; }; template struct transparent:Functor { using is_transparent=void; using Functor::Functor; }; template void test_insertion() { using filter=rehash_filter< revalue_filter>, transparent >; using value_type=typename filter::value_type; ValueFactory fac; { filter f(10000); value_type x{fac(),0}; f.insert(const_cast(x)); BOOST_TEST(f.may_contain(x)); } { filter f(10000); value_type x{fac(),0}; f.insert(std::move(x)); BOOST_TEST(f.may_contain(x)); } { filter f(10000); auto x=fac(); f.insert(x); /* transparent insert */ BOOST_TEST(f.may_contain(x)); } { filter f(10000); std::array input; for(auto& x:input)x={fac(),0}; f.insert(input.begin(),input.end()); BOOST_TEST(may_contain(f,input)); } { filter f(10000); std::array input; for(auto& x:input)x=fac(); f.insert(input.begin(),input.end()); /* transparent insert */ BOOST_TEST(may_contain(f,input)); } { filter f(10000); std::initializer_list il={{fac(),0},{fac(),0},{fac(),0}}; f.insert(il); BOOST_TEST(may_contain(f,il)); } } struct lambda { template void operator()(T) { using filter=typename T::type; using value_type=typename filter::value_type; test_insertion>(); } }; int main() { boost::mp11::mp_for_each(lambda{}); return boost::report_errors(); }