Skip to content

Commit

Permalink
More tests and check ci jobs.
Browse files Browse the repository at this point in the history
  • Loading branch information
ColinH committed Feb 17, 2024
1 parent e3e5d97 commit b05a86a
Show file tree
Hide file tree
Showing 19 changed files with 238 additions and 49 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ jobs:
- android-27
- android-29
abi:
- armeabi-v7a
- arm64-v8a
build_type: [Debug, Release]

Expand Down
File renamed without changes.
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,6 @@ jobs:

- run: sudo apt-get install -yq clang-tidy

- run: find include/ -name '*.hpp' | grep -vF mmap_file_win32.hpp | grep -vF endian_win.hpp | xargs -I '{}' clang-tidy --quiet '{}' -- --std=c++17 -Iinclude
- run: find include/ -name '*.hpp' | grep -vF mmap_file_win32.hpp | grep -vF byteswap_win32.hpp | xargs -I '{}' clang-tidy --quiet '{}' -- --std=c++17 -Iinclude

- run: find src/ -name '*.cpp' | xargs -I '{}' clang-tidy --quiet '{}' -- --std=c++17 -Iinclude
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@ jobs:
matrix:
language: [ 'cpp' ]
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]
# Learn more:
# https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed

steps:
Expand Down
13 changes: 9 additions & 4 deletions dot.github/workflows/linux.yml → .github/workflows/linux.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,15 @@ jobs:
fail-fast: false
matrix:
compiler:
- g++-9
- g++-10
- g++-11
- g++-12
- g++-13
- clang++-13
- clang++-14
- clang++-15
- clang++-16
- clang++-17
build_type: [Debug, Release]

runs-on: ubuntu-latest
Expand All @@ -48,12 +51,14 @@ jobs:
fail-fast: false
matrix:
compiler:
- clang++-7
- clang++-8
- clang++-9
- g++-10
- g++-11
- clang++-10
- clang++-11
- clang++-12
- clang++-13
- clang++-14
- clang++-15
build_type: [Debug, Release]

runs-on: ubuntu-20.04
Expand Down
12 changes: 12 additions & 0 deletions dot.github/workflows/macos.yml → .github/workflows/macos.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,18 @@ jobs:
- xcode: 14
build_type: Release
os: macos-12
- xcode: 15
build_type: Debug
os: macos-13
- xcode: 15
build_type: Release
os: macos-13
- xcode: 15
build_type: Debug
os: macos-14
- xcode: 15
build_type: Release
os: macos-14
runs-on: ${{ matrix.os }}

steps:
Expand Down
File renamed without changes.
File renamed without changes.
46 changes: 28 additions & 18 deletions include/tao/pegtl/internal/analyze_traits.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ namespace TAO_PEGTL_NAMESPACE
{
template< typename Name, template< typename... > class Action, typename... Rules >
struct analyze_traits< Name, internal::action< Action, Rules... > >
: analyze_traits< Name, typename internal::seq< Rules... >::rule_t >
: analyze_seq_traits< Rules... >
{};

template< typename Name, typename Peek >
Expand All @@ -27,7 +27,7 @@ namespace TAO_PEGTL_NAMESPACE

template< typename Name, typename... Actions >
struct analyze_traits< Name, internal::apply< Actions... > >
: analyze_opt_traits<>
: analyze_opt_traits<>
{};

template< typename Name, typename... Actions >
Expand All @@ -51,7 +51,7 @@ namespace TAO_PEGTL_NAMESPACE

template< typename Name, typename... Rules >
struct analyze_traits< Name, internal::at< Rules... > >
: analyze_traits< Name, typename internal::opt< Rules... >::rule_t >
: analyze_opt_traits< Rules... >
{};

template< typename Name >
Expand All @@ -71,17 +71,17 @@ namespace TAO_PEGTL_NAMESPACE

template< typename Name, template< typename... > class Control, typename... Rules >
struct analyze_traits< Name, internal::control< Control, Rules... > >
: analyze_traits< Name, typename internal::seq< Rules... >::rule_t >
: analyze_seq_traits< Rules... >
{};

template< typename Name, typename... Rules >
struct analyze_traits< Name, internal::disable< Rules... > >
: analyze_traits< Name, typename internal::seq< Rules... >::rule_t >
: analyze_seq_traits< Rules... >
{};

template< typename Name, typename... Rules >
struct analyze_traits< Name, internal::enable< Rules... > >
: analyze_traits< Name, typename internal::seq< Rules... >::rule_t >
: analyze_seq_traits< Rules... >
{};

template< typename Name >
Expand Down Expand Up @@ -128,7 +128,7 @@ namespace TAO_PEGTL_NAMESPACE

template< typename Name, typename... Rules >
struct analyze_traits< Name, internal::not_at< Rules... > >
: analyze_traits< Name, typename internal::opt< Rules... >::rule_t >
: analyze_opt_traits< Rules... >
{};

template< typename Name, typename... Rules >
Expand All @@ -153,17 +153,17 @@ namespace TAO_PEGTL_NAMESPACE

template< typename Name, unsigned Cnt, typename... Rules >
struct analyze_traits< Name, internal::rep< Cnt, Rules... > >
: analyze_traits< Name, std::conditional_t< ( Cnt != 0 ), typename internal::seq< Rules... >::rule_t, typename internal::opt< Rules... >::rule_t > >
: std::conditional_t< ( Cnt != 0 ), analyze_seq_traits< Rules... >, analyze_opt_traits< Rules... > >
{};

template< typename Name, unsigned Min, unsigned Max, typename... Rules >
struct analyze_traits< Name, internal::rep_min_max< Min, Max, Rules... > >
: analyze_traits< Name, std::conditional_t< ( Min != 0 ), typename internal::seq< Rules... >::rule_t, typename internal::opt< Rules... >::rule_t > >
: std::conditional_t< ( Min != 0 ), analyze_seq_traits< Rules... >, analyze_opt_traits< Rules... > >
{};

template< typename Name, unsigned Max, typename... Rules >
struct analyze_traits< Name, internal::rep_opt< Max, Rules... > >
: analyze_traits< Name, typename internal::opt< Rules... >::rule_t >
: analyze_opt_traits< Rules... >
{};

template< typename Name, typename Rule, typename... Rules >
Expand All @@ -178,17 +178,27 @@ namespace TAO_PEGTL_NAMESPACE

template< typename Name, typename... Rules >
struct analyze_traits< Name, internal::star< Rules... > >
: analyze_traits< Name, typename internal::opt< Rules..., Name >::rule_t >
: analyze_opt_traits< Rules..., Name >
{};

template< typename Name, typename... Rules >
struct analyze_traits< Name, internal::star_partial< Rules... > >
: analyze_traits< Name, typename internal::opt< Rules..., Name >::rule_t >
: analyze_opt_traits< Rules..., Name >
{};

template< typename Name, typename... Rules >
struct analyze_traits< Name, internal::star_strict< Rules... > >
: analyze_opt_traits< Rules..., Name >
{};

template< typename Name, typename State, typename... Rules >
struct analyze_traits< Name, internal::state< State, Rules... > >
: analyze_traits< Name, typename internal::seq< Rules... >::rule_t >
: analyze_seq_traits< Rules... >
{};

template< typename Name, typename... Rules >
struct analyze_traits< Name, internal::strict< Rules... > >
: analyze_opt_traits< Rules... >
{};

template< typename Name >
Expand Down Expand Up @@ -221,17 +231,17 @@ namespace TAO_PEGTL_NAMESPACE
#if defined( __cpp_exceptions )
template< typename Name, typename Cond, typename... Rules >
struct analyze_traits< Name, internal::if_must< true, Cond, Rules... > >
: analyze_traits< Name, typename internal::opt< Cond, Rules... >::rule_t >
: analyze_opt_traits< Cond, Rules... >
{};

template< typename Name, typename Cond, typename... Rules >
struct analyze_traits< Name, internal::if_must< false, Cond, Rules... > >
: analyze_traits< Name, typename internal::seq< Cond, Rules... >::rule_t >
: analyze_seq_traits< Cond, Rules... >
{};

template< typename Name, typename... Rules >
struct analyze_traits< Name, internal::must< Rules... > >
: analyze_traits< Name, typename internal::seq< Rules... >::rule_t >
: analyze_seq_traits< Rules... >
{};

template< typename Name, typename T >
Expand All @@ -241,12 +251,12 @@ namespace TAO_PEGTL_NAMESPACE

template< typename Name, typename Exception, typename... Rules >
struct analyze_traits< Name, internal::try_catch_raise_nested< Exception, Rules... > >
: analyze_traits< Name, typename internal::seq< Rules... >::rule_t >
: analyze_seq_traits< Rules... >
{};

template< typename Name, typename Exception, typename... Rules >
struct analyze_traits< Name, internal::try_catch_return_false< Exception, Rules... > >
: analyze_traits< Name, typename internal::seq< Rules... >::rule_t >
: analyze_seq_traits< Rules... >
{};
#endif

Expand Down
2 changes: 1 addition & 1 deletion include/tao/pegtl/internal/consume.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ namespace TAO_PEGTL_NAMESPACE::internal
template< typename ParseInput >
[[nodiscard]] static bool match( ParseInput& in ) noexcept
{
static_assert( is_integer_fraction( sizeof( Reference ), sizeof( *in.current() ) ) );
static_assert( is_divisible( sizeof( Reference ), sizeof( *in.current() ) ) );

if( in.size( Count ) >= Count ) {
in.template consume< eol_unknown_tag >( Count );
Expand Down
2 changes: 2 additions & 0 deletions include/tao/pegtl/internal/integer_adapt.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@

namespace TAO_PEGTL_NAMESPACE::internal
{
// TODO: Use C++20 std::bit_cast.

template< typename Type, typename Data >
[[nodiscard]] Type integer_adapt( const Data* pointer ) noexcept
{
Expand Down
8 changes: 5 additions & 3 deletions include/tao/pegtl/internal/integer_size.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,16 +28,18 @@ namespace TAO_PEGTL_NAMESPACE::internal
return sizeof( Type );
}
else {
static_assert( dependent_false< Data > );
static_assert( dependent_false< Type, Data > );
}
}

template< typename Type, typename Input>
[[nodiscard]] constexpr std::size_t integer_input_size() noexcept
{
static_assert( std::is_same_v< typename Input::data_t, std::decay_t< decltype( *( std::declval< const Input& >().current() ) ) > > );
using Data = typename Input::data_t;

return integer_size< Type, typename Input::data_t >();
static_assert( std::is_same_v< Data, std::decay_t< decltype( *( std::declval< const Input& >().current() ) ) > > );

return integer_size< Type, Data >();
}

} // namespace TAO_PEGTL_NAMESPACE::internal
Expand Down
20 changes: 11 additions & 9 deletions include/tao/pegtl/internal/math_utility.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,27 +11,29 @@

namespace TAO_PEGTL_NAMESPACE::internal
{
[[nodiscard]] constexpr bool is_divisible( const std::size_t n, const std::size_t d ) noexcept
{
return ( n / d ) * d == n;
}

// Here "range" is like for the range rules, i.e. including both boundaries.

template< typename Data >
[[nodiscard]] constexpr bool ranges_disjoint( const Data ll, const Data lh, const Data rl, const Data rh ) noexcept
{
// assert( ll < lh );
// assert( rl < rh );
// assert( ll <= lh );
// assert( rl <= rh );
return ( lh < rl ) || ( rh < ll );
}

template< typename Data >
[[nodiscard]] constexpr bool ranges_overlap( const Data ll, const Data lh, const Data rl, const Data rh ) noexcept
{
// assert( ll < lh );
// assert( rl < rh );
// assert( ll <= lh );
// assert( rl <= rh );
return ( lh >= rl ) && ( rh >= ll );
}

[[nodiscard]] constexpr bool is_integer_fraction( const std::size_t n, const std::size_t d ) noexcept
{
return ( n / d ) * d == n;
}

} // namespace TAO_PEGTL_NAMESPACE::internal

#endif
33 changes: 33 additions & 0 deletions src/test/pegtl/internal_integer_size.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
// Copyright (c) 2024 Dr. Colin Hirsch and Daniel Frey
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt)

#include <cstddef>

#include <tao/pegtl/internal/integer_size.hpp>
#include <tao/pegtl/internal/view_input.hpp>

using namespace TAO_PEGTL_NAMESPACE;

int main()
{
static_assert( internal::integer_size< char, char >() == 1 );
static_assert( internal::integer_size< char, std::uint8_t >() == 1 );
static_assert( internal::integer_size< short, std::uint16_t >() == 1 ); // Yes, I know...
static_assert( internal::integer_size< int, unsigned >() == 1 );
static_assert( internal::integer_size< std::int32_t, char32_t >() == 1 );

static_assert( internal::integer_size< char32_t, char >() == sizeof( char32_t ) );
static_assert( internal::integer_size< std::int64_t, std::byte >() == sizeof( std::int64_t ) );

static_assert( internal::integer_input_size< char, internal::view_input< char > >() == 1 );
static_assert( internal::integer_input_size< char, internal::view_input< std::uint8_t > >() == 1 );
static_assert( internal::integer_input_size< short, internal::view_input< std::uint16_t > >() == 1 ); // Yes, I know...
static_assert( internal::integer_input_size< int, internal::view_input< unsigned > >() == 1 );
static_assert( internal::integer_input_size< std::int32_t, internal::view_input< char32_t > >() == 1 );

static_assert( internal::integer_input_size< char32_t, internal::view_input< char > >() == sizeof( char32_t ) );
static_assert( internal::integer_input_size< std::int64_t, internal::view_input< std::byte > >() == sizeof( std::int64_t ) );

return 0;
}
49 changes: 49 additions & 0 deletions src/test/pegtl/internal_math_utility.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
// Copyright (c) 2024 Dr. Colin Hirsch and Daniel Frey
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt)

#include <tao/pegtl/internal/math_utility.hpp>

using namespace TAO_PEGTL_NAMESPACE;

int main()
{
static_assert( internal::is_divisible( 4, 1 ) );
static_assert( internal::is_divisible( 4, 2 ) );
static_assert( internal::is_divisible( 40, 40 ) );
static_assert( internal::is_divisible( 400, 20 ) );

static_assert( !internal::is_divisible( 1, 2 ) );
static_assert( !internal::is_divisible( 20, 400 ) );
static_assert( !internal::is_divisible( 21, 14 ) );

static_assert( internal::ranges_disjoint( 10, 20, 30, 40 ) );
static_assert( internal::ranges_disjoint( 30, 40, 10, 20 ) );
static_assert( internal::ranges_disjoint( 10, 20, 21, 40 ) );
static_assert( internal::ranges_disjoint( 21, 40, 10, 20 ) );

static_assert( !internal::ranges_overlap( 10, 20, 30, 40 ) );
static_assert( !internal::ranges_overlap( 30, 40, 10, 20 ) );
static_assert( !internal::ranges_overlap( 10, 20, 21, 40 ) );
static_assert( !internal::ranges_overlap( 21, 40, 10, 20 ) );

static_assert( internal::ranges_overlap( 10, 20, 10, 10 ) );
static_assert( internal::ranges_overlap( 10, 20, 20, 20 ) );
static_assert( internal::ranges_overlap( 10, 20, 15, 20 ) );
static_assert( internal::ranges_overlap( 10, 20, 10, 15 ) );
static_assert( internal::ranges_overlap( 10, 30, 20, 40 ) );
static_assert( internal::ranges_overlap( 20, 40, 10, 30 ) );
static_assert( internal::ranges_overlap( 10, 30, 30, 40 ) );
static_assert( internal::ranges_overlap( 30, 40, 10, 30 ) );

static_assert( !internal::ranges_disjoint( 10, 20, 10, 10 ) );
static_assert( !internal::ranges_disjoint( 10, 20, 20, 20 ) );
static_assert( !internal::ranges_disjoint( 10, 20, 15, 20 ) );
static_assert( !internal::ranges_disjoint( 10, 20, 10, 15 ) );
static_assert( !internal::ranges_disjoint( 10, 30, 20, 40 ) );
static_assert( !internal::ranges_disjoint( 20, 40, 10, 30 ) );
static_assert( !internal::ranges_disjoint( 10, 30, 30, 40 ) );
static_assert( !internal::ranges_disjoint( 30, 40, 10, 30 ) );

return 0;
}
Loading

0 comments on commit b05a86a

Please sign in to comment.