1
0
forked from boostorg/core

Compare commits

...

42 Commits

Author SHA1 Message Date
Peter Dimov
1e1ccb491e Fix GCC 4.8 Drone job to actually use 4.8 2025-02-23 18:37:43 +02:00
Glen Fernandes
787b03ea9c Use BOOST_ASSERT but disable assertions on older GCC 2025-01-18 17:14:03 -05:00
Glen Fernandes
b9a2221b3b Rename detail assert macro since it isn't a public facility 2025-01-18 14:14:24 -05:00
Glen Fernandes
cb603c9c6b Undef assert macro and remove guards 2025-01-18 00:53:35 -05:00
Glen Fernandes
24a8174ef1 Add asserts to span 2025-01-18 00:52:31 -05:00
Peter Dimov
7178a52909 Merge pull request #187 from eagleoflqj/ohos
OpenHarmony doesn't support pthread_setcancelstate.
2025-01-08 16:45:11 +02:00
Qijia Liu
9a3febf848 OpenHarmony doesn't support pthread_setcancelstate. 2025-01-07 21:13:58 -05:00
Peter Dimov
3e147e4ced Merge pull request #183 from Flamefire/warning
Avoid `-Wzero-as-null-pointer-constant` warning in string_view ctor
2025-01-05 17:25:14 +02:00
Alexander Grund
1222948a8e Avoid -Wzero-as-null-pointer-constant warning in string_view ctor 2025-01-05 11:57:02 +01:00
Peter Dimov
749b6340b5 Update ci.yml 2024-11-27 20:58:46 +02:00
Peter Dimov
92f6cfb3cc Remove hash_value overload for basic_string_view; it's no longer needed 2024-11-11 03:18:02 +02:00
Peter Dimov
ed452c57a3 Add sv_hash_test to test/CMakeLists.txt 2024-11-11 02:31:11 +02:00
Peter Dimov
78885aab8e Disable serialization tests under MinGW 32 bit 2024-11-10 22:35:54 +02:00
Peter Dimov
8ebe2e7f57 Update ci.yml 2024-11-10 19:57:55 +02:00
Peter Dimov
32e6c30f4b Add test/sv_hash_test.cpp 2024-11-10 19:32:31 +02:00
Peter Dimov
cebfe007e8 Update test/Jamfile 2024-11-10 16:21:59 +02:00
Peter Dimov
3e16f3df14 Update .drone.jsonnet 2024-11-10 15:43:57 +02:00
Peter Dimov
e3a2e88e4c Update .drone.jsonnet 2024-08-21 10:50:28 +03:00
Peter Dimov
5e451b6c84 Add VERBATIM to add_custom_target 2024-08-21 04:14:05 +03:00
Peter Dimov
88a957b21c test/Jamfile: add cxx11_ref_qualifiers (GCC 4.8+) to Serialization tests because of Optional 2024-08-21 03:02:31 +03:00
Peter Dimov
1bac0ccfd1 Update build.jam 2024-08-21 02:32:32 +03:00
Rene Rivera
602961e526 Update build deps. 2024-08-01 21:30:37 -05:00
Rene Rivera
366802b43c Adjust doc build to avoid boost-root references. 2024-07-28 10:42:22 -05:00
Rene Rivera
9dd0a8e1e4 Sync from upstream. 2024-07-27 11:09:51 -05:00
Rene Rivera
a09ee19e3e Sync from upstream. 2024-07-25 17:19:14 -05:00
Rene Rivera
040b018ce0 Restore warnings-as-errors-off that got accidentally removed in a merge. 2024-07-24 23:55:54 -05:00
Rene Rivera
42d0c5954a Move inter-lib dependencies to a project variable and into the build targets. 2024-07-23 22:34:24 -05:00
Rene Rivera
243eec26fe Update copyright dates. 2024-07-20 22:52:05 -05:00
Rene Rivera
44c32d7691 Change all <source> references to <library>. 2024-07-20 19:37:53 -05:00
Rene Rivera
0ee7dc5910 Sync from upstream. 2024-07-18 09:29:32 -05:00
Rene Rivera
983234baee Sync from upstream. 2024-07-12 08:54:55 -05:00
Rene Rivera
8b8944dd6e Bump B2 require to 5.2 2024-06-14 11:33:55 -05:00
Rene Rivera
278d3f0060 Sync from upstream. 2024-05-30 11:21:22 -05:00
Rene Rivera
a8c757ddf2 Add requires-b2 check to top-level build file. 2024-05-05 09:00:01 -05:00
Rene Rivera
98a055cf34 Add missing lib reference. 2024-04-25 22:20:12 -05:00
Rene Rivera
074a467d9d Sync from upstream. 2024-04-24 20:30:49 -05:00
Rene Rivera
0a238bb30d Sync from upstream. 2024-04-20 15:33:40 -05:00
Rene Rivera
b18495fe35 Sync from upstream. 2024-04-12 22:40:43 -05:00
Rene Rivera
151d0c4143 Sync from upstream. 2024-04-10 07:57:45 -05:00
Rene Rivera
25b0defdeb Switch to library requirements instead of source. As source puts extra source in install targets. 2024-03-29 21:15:58 -05:00
Rene Rivera
541745ea24 Sync from upstream. 2024-03-23 07:57:20 -05:00
Rene Rivera
5f825106c7 Make the library modular usable. 2024-03-11 08:32:21 -05:00
14 changed files with 259 additions and 68 deletions

View File

@@ -32,6 +32,8 @@ local linux_pipeline(name, image, environment, packages = "", sources = [], arch
commands:
[
'set -e',
'uname -a',
'echo $DRONE_STAGE_MACHINE',
'wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add -',
] +
(if sources != [] then [ ('apt-add-repository "' + source + '"') for source in sources ] else []) +
@@ -122,7 +124,7 @@ local windows_pipeline(name, image, environment, arch = "amd64") =
linux_pipeline(
"Linux 16.04 GCC 4.8 32/64",
"cppalliance/droneubuntu1604:1",
{ TOOLSET: 'gcc', COMPILER: 'g++', CXXSTD: '03,11', ADDRMD: '32,64' },
{ TOOLSET: 'gcc', COMPILER: 'g++-4.8', CXXSTD: '03,11', ADDRMD: '32,64' },
"g++-4.8-multilib",
),
@@ -200,10 +202,9 @@ local windows_pipeline(name, image, environment, arch = "amd64") =
),
linux_pipeline(
"Linux 23.04 GCC 13 32/64",
"cppalliance/droneubuntu2304:1",
{ TOOLSET: 'gcc', COMPILER: 'g++-13', CXXSTD: '03,11,14,17,20,2b', ADDRMD: '32,64' },
"g++-13-multilib",
"Linux 24.04 GCC 13* 32/64",
"cppalliance/droneubuntu2404:1",
{ TOOLSET: 'gcc', COMPILER: 'g++', CXXSTD: '03,11,14,17,20,2b', ADDRMD: '32,64' },
),
linux_pipeline(
@@ -354,15 +355,15 @@ local windows_pipeline(name, image, environment, arch = "amd64") =
),
linux_pipeline(
"Linux 23.04 Clang 16",
"cppalliance/droneubuntu2304:1",
"Linux 24.04 Clang 16",
"cppalliance/droneubuntu2404:1",
{ TOOLSET: 'clang', COMPILER: 'clang++-16', CXXSTD: '03,11,14,17,20,2b' },
"clang-16",
),
linux_pipeline(
"Linux 23.10 Clang 17",
"cppalliance/droneubuntu2310:1",
"Linux 24.04 Clang 17",
"cppalliance/droneubuntu2404:1",
{ TOOLSET: 'clang', COMPILER: 'clang++-17', CXXSTD: '03,11,14,17,20,2b' },
"clang-17",
),
@@ -381,6 +382,13 @@ local windows_pipeline(name, image, environment, arch = "amd64") =
"clang-18",
),
linux_pipeline(
"Linux 24.10 Clang 19",
"cppalliance/droneubuntu2410:1",
{ TOOLSET: 'clang', COMPILER: 'clang++-19', CXXSTD: '03,11,14,17,20,2b' },
"clang-19",
),
macos_pipeline(
"MacOS 10.15 Xcode 12.2 UBSAN",
{ TOOLSET: 'clang', COMPILER: 'clang++', CXXSTD: '03,11,14,1z' } + ubsan,

View File

@@ -125,7 +125,7 @@ jobs:
cxxstd: "03,11,14,17,20,23"
address-model: 32,64
os: ubuntu-latest
container: ubuntu:23.04
container: ubuntu:24.04
install:
- g++-13-multilib
- toolset: gcc-14
@@ -283,7 +283,7 @@ jobs:
compiler: clang++-16
cxxstd: "03,11,14,17,20,2b"
os: ubuntu-latest
container: ubuntu:23.04
container: ubuntu:24.04
install:
- clang-16
- libc++-16-dev
@@ -294,7 +294,7 @@ jobs:
compiler: clang++-17
cxxstd: "03,11,14,17,20,2b"
os: ubuntu-latest
container: ubuntu:23.10
container: ubuntu:24.04
install:
- clang-17
- libc++-17-dev
@@ -312,6 +312,17 @@ jobs:
- libc++abi-18-dev
cxxflags: -stdlib=libc++
linkflags: -stdlib=libc++
- toolset: clang
compiler: clang++-19
cxxstd: "03,11,14,17,20,2b"
os: ubuntu-latest
container: ubuntu:24.10
install:
- clang-19
- libc++-19-dev
- libc++abi-19-dev
cxxflags: -stdlib=libc++
linkflags: -stdlib=libc++
- name: UBSAN
toolset: clang
compiler: clang++-15
@@ -325,15 +336,15 @@ jobs:
- libc++-15-dev
- libc++abi-15-dev
- toolset: clang
cxxstd: "03,11,14,17,20,2b"
os: macos-12
- toolset: clang
cxxstd: "03,11,14,17,20,2b"
os: macos-13
- toolset: clang
cxxstd: "03,11,14,17,20,2b"
os: macos-14
- toolset: clang
cxxstd: "03,11,14,17,20,2b"
os: macos-15
timeout-minutes: 45
runs-on: ${{matrix.os}}
@@ -626,9 +637,10 @@ jobs:
include:
- os: ubuntu-20.04
- os: ubuntu-22.04
- os: macos-12
- os: ubuntu-24.04
- os: macos-13
- os: macos-14
- os: macos-15
runs-on: ${{matrix.os}}
timeout-minutes: 10
@@ -693,9 +705,10 @@ jobs:
include:
- os: ubuntu-20.04
- os: ubuntu-22.04
- os: macos-12
- os: ubuntu-24.04
- os: macos-13
- os: macos-14
- os: macos-15
runs-on: ${{matrix.os}}
timeout-minutes: 10
@@ -770,9 +783,10 @@ jobs:
include:
- os: ubuntu-20.04
- os: ubuntu-22.04
- os: macos-12
- os: ubuntu-24.04
- os: macos-13
- os: macos-14
- os: macos-15
runs-on: ${{matrix.os}}
timeout-minutes: 20

23
build.jam Normal file
View File

@@ -0,0 +1,23 @@
# Copyright 2023-2024 René Ferdinand Rivera Morell
# Copyright 2024 Peter Dimov
# Distributed under the Boost Software License, Version 1.0.
# https://www.boost.org/LICENSE_1_0.txt
require-b2 5.2 ;
constant boost_dependencies :
/boost/assert//boost_assert
/boost/config//boost_config
/boost/static_assert//boost_static_assert
/boost/throw_exception//boost_throw_exception
;
project /boost/core ;
explicit
[ alias boost_core : : : : <include>include <library>$(boost_dependencies) ]
[ alias all : boost_core test ]
;
call-if : boost-library core
;

View File

@@ -9,7 +9,7 @@ import project ;
import doxygen ;
import quickbook ;
path-constant INCLUDES : ../../.. ;
path-constant INCLUDES : ../include ;
doxygen ref_reference
:

View File

@@ -0,0 +1,18 @@
/*
Copyright 2025 Glen Joseph Fernandes
(glenjofe@gmail.com)
Distributed under the Boost Software License, Version 1.0.
(http://www.boost.org/LICENSE_1_0.txt)
*/
#undef BOOST_CORE_DETAIL_ASSERT
#if !defined(__clang__) && \
!defined(__INTEL_COMPILER) && \
defined(__GNUC__) && \
(__GNUC__ < 5)
#define BOOST_CORE_DETAIL_ASSERT(expr) void(0)
#else
#include <boost/assert.hpp>
#define BOOST_CORE_DETAIL_ASSERT(expr) BOOST_ASSERT(expr)
#endif

View File

@@ -67,7 +67,7 @@ namespace core
inline void sp_thread_sleep() BOOST_NOEXCEPT
{
#if defined(BOOST_HAS_PTHREADS) && !defined(__ANDROID__)
#if defined(BOOST_HAS_PTHREADS) && !defined(__ANDROID__) && !defined(__OHOS__)
int oldst;
pthread_setcancelstate( PTHREAD_CANCEL_DISABLE, &oldst );
@@ -85,7 +85,7 @@ inline void sp_thread_sleep() BOOST_NOEXCEPT
nanosleep( &rqtp, 0 );
#if defined(BOOST_HAS_PTHREADS) && !defined(__ANDROID__)
#if defined(BOOST_HAS_PTHREADS) && !defined(__ANDROID__) && !defined(__OHOS__)
pthread_setcancelstate( oldst, &oldst );

View File

@@ -41,9 +41,6 @@ namespace boost
// forward declaration of boost::basic_string_view from Utility
template<class Ch, class Tr> class basic_string_view;
// forward declaration of boost::hash_range from ContainerHash
template<class It> std::size_t hash_range( It, It );
namespace core
{
namespace detail
@@ -381,7 +378,7 @@ public:
}
template<class End> BOOST_CXX14_CONSTEXPR basic_string_view( Ch const* first, End last,
typename boost::enable_if<boost::core::detail::is_same<End, Ch const*> >::type* = 0 ) BOOST_NOEXCEPT: p_( first ), n_( static_cast<size_type>( last - first ) )
typename boost::enable_if<boost::core::detail::is_same<End, Ch const*>, int >::type = 0 ) BOOST_NOEXCEPT: p_( first ), n_( static_cast<size_type>( last - first ) )
{
BOOST_ASSERT( last - first >= 0 );
}
@@ -399,7 +396,7 @@ public:
#endif
template<class Ch2> basic_string_view( boost::basic_string_view<Ch2, std::char_traits<Ch2> > const& str,
typename boost::enable_if<boost::core::detail::is_same<Ch, Ch2> >::type* = 0 ) BOOST_NOEXCEPT: p_( str.data() ), n_( str.size() )
typename boost::enable_if<boost::core::detail::is_same<Ch, Ch2>, int >::type = 0 ) BOOST_NOEXCEPT: p_( str.data() ), n_( str.size() )
{
}
@@ -1181,11 +1178,6 @@ public:
}
#endif
inline friend std::size_t hash_value( basic_string_view const& sv )
{
return boost::hash_range( sv.begin(), sv.end() );
}
};
// stream inserter

View File

@@ -8,6 +8,7 @@ Distributed under the Boost Software License, Version 1.0.
#ifndef BOOST_CORE_SPAN_HPP
#define BOOST_CORE_SPAN_HPP
#include <boost/core/detail/assert.hpp>
#include <boost/core/data.hpp>
#include <array>
#include <iterator>
@@ -274,17 +275,21 @@ public:
}
constexpr span<T, dynamic_extent> first(size_type c) const {
return span<T, dynamic_extent>(s_.p, c);
return BOOST_CORE_DETAIL_ASSERT(c <= size()),
span<T, dynamic_extent>(s_.p, c);
}
constexpr span<T, dynamic_extent> last(size_type c) const {
return span<T, dynamic_extent>(s_.p + (s_.n - c), c);
return BOOST_CORE_DETAIL_ASSERT(c <= size()),
span<T, dynamic_extent>(s_.p + (s_.n - c), c);
}
constexpr span<T, dynamic_extent> subspan(size_type o,
size_type c = dynamic_extent) const {
return span<T, dynamic_extent>(s_.p + o,
c == dynamic_extent ? s_.n - o : c);
return BOOST_CORE_DETAIL_ASSERT(o <= size() &&
(c == dynamic_extent || c + o <= size())),
span<T, dynamic_extent>(s_.p + o,
c == dynamic_extent ? s_.n - o : c);
}
constexpr size_type size() const noexcept {
@@ -300,15 +305,15 @@ public:
}
constexpr reference operator[](size_type i) const {
return s_.p[i];
return BOOST_CORE_DETAIL_ASSERT(i < size()), s_.p[i];
}
constexpr reference front() const {
return *s_.p;
return BOOST_CORE_DETAIL_ASSERT(!empty()), *s_.p;
}
constexpr reference back() const {
return s_.p[s_.n - 1];
return BOOST_CORE_DETAIL_ASSERT(!empty()), s_.p[s_.n - 1];
}
constexpr pointer data() const noexcept {

View File

@@ -8,17 +8,6 @@ if(HAVE_BOOST_TEST)
boost_test_jamfile(FILE Jamfile.v2 LINK_LIBRARIES Boost::core Boost::static_assert Boost::type_traits)
set(BOOST_TEST_LINK_LIBRARIES Boost::core Boost::type_traits)
boost_test(TYPE run SOURCES eif_constructors.cpp)
boost_test(TYPE run SOURCES eif_dummy_arg_disambiguation.cpp)
boost_test(TYPE run SOURCES eif_lazy.cpp)
boost_test(TYPE run SOURCES eif_lazy_test.cpp)
boost_test(TYPE run SOURCES eif_member_templates.cpp)
boost_test(TYPE run SOURCES eif_namespace_disambiguation.cpp)
boost_test(TYPE run SOURCES eif_no_disambiguation.cpp)
boost_test(TYPE run SOURCES eif_partial_specializations.cpp)
set(BOOST_TEST_LINK_LIBRARIES Boost::core Boost::throw_exception)
boost_test(TYPE run SOURCES no_exceptions_support_test.cpp)
@@ -27,6 +16,10 @@ set(BOOST_TEST_LINK_LIBRARIES Boost::core Boost::utility)
boost_test(TYPE run SOURCES sv_conversion_test2.cpp)
set(BOOST_TEST_LINK_LIBRARIES Boost::core Boost::container_hash)
boost_test(TYPE run SOURCES sv_hash_test.cpp)
set(BOOST_TEST_LINK_LIBRARIES Boost::core Boost::config Boost::move Boost::smart_ptr)
boost_test(TYPE run SOURCES fclose_deleter_test.cpp)

View File

@@ -6,11 +6,15 @@
# See accompanying file LICENSE_1_0.txt or copy at
# http://www.boost.org/LICENSE_1_0.txt
require-b2 5.0.1 ;
import-search /boost/config/checks ;
import config : requires ;
import modules ;
import testing ;
project : requirements
<library>/boost/core//boost_core
<library>/boost/type_traits//boost_type_traits
<warnings>extra
<toolset>msvc:<warnings-as-errors>on
<toolset>clang:<warnings-as-errors>on
@@ -31,6 +35,8 @@ local pedantic-errors = <warnings>pedantic
<toolset>gcc:<warnings-as-errors>on
<toolset>clang:<warnings-as-errors>on ;
local CPP11 = [ requires cxx11_variadic_templates cxx11_template_aliases cxx11_decltype cxx11_constexpr cxx11_noexcept cxx11_ref_qualifiers ] ;
# quick test (for CI)
run quick.cpp ;
@@ -79,14 +85,14 @@ compile-fail ref_implicit_fail4.cpp
run ref_cv_test.cpp ;
run ref_conversion_test.cpp ;
run eif_constructors.cpp : ;
run eif_dummy_arg_disambiguation.cpp : ;
run eif_lazy.cpp : ;
run eif_lazy_test.cpp : ;
run eif_member_templates.cpp : ;
run eif_namespace_disambiguation.cpp : ;
run eif_no_disambiguation.cpp : ;
run eif_partial_specializations.cpp : ;
run eif_constructors.cpp ;
run eif_dummy_arg_disambiguation.cpp ;
run eif_lazy.cpp ;
run eif_lazy_test.cpp ;
run eif_member_templates.cpp ;
run eif_namespace_disambiguation.cpp ;
run eif_no_disambiguation.cpp ;
run eif_partial_specializations.cpp ;
compile-fail noncopyable_compile_fail.cpp
: $(warnings-as-errors-off) ;
@@ -197,7 +203,13 @@ run underlying_type.cpp ;
compile-fail null_deleter_compile_fail_adl.cpp
: $(warnings-as-errors-off) ;
run fclose_deleter_test.cpp : : : <target-os>windows:<define>_CRT_SECURE_NO_WARNINGS <target-os>windows:<define>_CRT_SECURE_NO_DEPRECATE ;
run fclose_deleter_test.cpp : : :
$(CPP11)
<library>/boost/move//boost_move
<library>/boost/smart_ptr//boost_smart_ptr
<target-os>windows:<define>_CRT_SECURE_NO_WARNINGS
<target-os>windows:<define>_CRT_SECURE_NO_DEPRECATE ;
compile-fail fclose_deleter_compile_fail_adl.cpp
: <target-os>windows:<define>_CRT_SECURE_NO_WARNINGS <target-os>windows:<define>_CRT_SECURE_NO_DEPRECATE $(warnings-as-errors-off) ;
@@ -205,7 +217,6 @@ run functor_test.cpp ;
compile-fail functor_compile_fail_adl.cpp
: $(warnings-as-errors-off) ;
run pointer_traits_pointer_test.cpp ;
run pointer_traits_element_type_test.cpp ;
run pointer_traits_difference_type_test.cpp ;
@@ -381,7 +392,7 @@ run sv_stream_insert_test.cpp
: : : $(pedantic-errors) ;
run sv_conversion_test.cpp
: : : $(pedantic-errors) ;
run sv_conversion_test2.cpp : ;
run sv_conversion_test2.cpp : : : <library>/boost/utility//boost_utility ;
run sv_common_reference_test.cpp
: : : $(pedantic-errors) ;
compile sv_common_reference_test2.cpp ;
@@ -392,10 +403,13 @@ compile-fail sv_nullptr_fail.cpp
compile sv_construct_test_cx.cpp ;
compile sv_construct_test_cx2.cpp ;
run sv_hash_test.cpp : : : $(CPP11) <library>/boost/container_hash//boost_container_hash ;
run span_test.cpp ;
run span_types_test.cpp ;
run span_constructible_test.cpp ;
run span_deduction_guide_test.cpp ;
run span_constexpr_test.cpp ;
run as_bytes_test.cpp ;
run as_writable_bytes_test.cpp ;
compile span_boost_begin_test.cpp ;
@@ -419,11 +433,15 @@ run memory_resource_test.cpp ;
run data_test.cpp ;
run size_test.cpp ;
import ../../config/checks/config : requires ;
local CPP11 = [ requires cxx11_variadic_templates cxx11_template_aliases cxx11_decltype cxx11_constexpr cxx11_noexcept ] ;
local with-serialization = <library>/boost//serialization/<warnings>off $(warnings-as-errors-off) <undefined-sanitizer>norecover:<link>static $(CPP11) ;
local with-serialization =
<library>/boost/serialization//boost_serialization/<warnings>off
$(warnings-as-errors-off)
<undefined-sanitizer>norecover:<link>static
$(CPP11)
# Serialization no longer builds under classic MinGW
# and <toolset>gcc,<target-os>windows,<address-model>32 fails for some reason
<toolset>gcc,<target-os>windows:<build>no
;
run serialization_nvp_test.cpp : : : $(with-serialization) <undefined-sanitizer>norecover:<build>no ;
run serialization_split_free_test.cpp : : : $(with-serialization) ;

View File

@@ -14,4 +14,4 @@ target_link_libraries(quick Boost::core)
enable_testing()
add_test(quick quick)
add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure -C $<CONFIG>)
add_custom_target(check VERBATIM COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure -C $<CONFIG>)

View File

@@ -18,4 +18,4 @@ target_link_libraries(quick Boost::core)
enable_testing()
add_test(quick quick)
add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure -C $<CONFIG>)
add_custom_target(check VERBATIM COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure -C $<CONFIG>)

View File

@@ -0,0 +1,72 @@
/*
Copyright 2025 Glen Joseph Fernandes
(glenjofe@gmail.com)
Distributed under the Boost Software License, Version 1.0.
(http://www.boost.org/LICENSE_1_0.txt)
*/
#include <boost/config.hpp>
#if !defined(BOOST_NO_CXX11_CONSTEXPR)
#include <boost/core/span.hpp>
#include <boost/core/lightweight_test.hpp>
constexpr const int array[4]{ 5, 10, 15, 20 };
void test_first()
{
constexpr boost::span<const int> s =
boost::span<const int>(array, 4).first(2);
BOOST_TEST_EQ(s.data(), &array[0]);
BOOST_TEST_EQ(s.size(), 2);
}
void test_last()
{
constexpr boost::span<const int> s =
boost::span<const int>(array, 4).last(2);
BOOST_TEST_EQ(s.data(), &array[2]);
BOOST_TEST_EQ(s.size(), 2);
}
void test_subspan()
{
constexpr boost::span<const int> s =
boost::span<const int>(array, 4).subspan(1, 2);
BOOST_TEST_EQ(s.data(), &array[1]);
BOOST_TEST_EQ(s.size(), 2);
}
void test_index()
{
constexpr const int i = boost::span<const int>(array, 4)[1];
BOOST_TEST_EQ(i, 10);
}
void test_front()
{
constexpr const int i = boost::span<const int>(array, 4).front();
BOOST_TEST_EQ(i, 5);
}
void test_back()
{
constexpr const int i = boost::span<const int>(array, 4).back();
BOOST_TEST_EQ(i, 20);
}
int main()
{
test_first();
test_last();
test_subspan();
test_index();
test_front();
test_back();
return boost::report_errors();
}
#else
int main()
{
return 0;
}
#endif

48
test/sv_hash_test.cpp Normal file
View File

@@ -0,0 +1,48 @@
// Copyright 2021-2024 Peter Dimov
// Distributed under the Boost Software License, Version 1.0.
// https://www.boost.org/LICENSE_1_0.txt
#include <boost/core/detail/string_view.hpp>
#include <boost/container_hash/hash.hpp>
#include <boost/core/lightweight_test.hpp>
#include <boost/config.hpp>
#include <string>
template<class T> std::size_t hv( T const& t )
{
return boost::hash<T>()( t );
}
template<class Ch> void test( Ch const* p )
{
std::basic_string<Ch> s( p );
boost::core::basic_string_view<Ch> sv( s );
BOOST_TEST_EQ( hv( s ), hv( sv ) );
}
int main()
{
test( "123" );
test( L"123" );
#if !defined(BOOST_NO_CXX11_CHAR16_T)
test( u"123" );
#endif
#if !defined(BOOST_NO_CXX11_CHAR32_T)
test( U"123" );
#endif
#if defined(__cpp_char8_t) && __cpp_char8_t >= 201811L
test( u8"123" );
#endif
return boost::report_errors();
}