From 9c4ab5711c9a888872bdb24fbdec2951d5439518 Mon Sep 17 00:00:00 2001 From: Enrico Seiler Date: Fri, 17 Nov 2023 12:23:30 +0100 Subject: [PATCH 1/5] [INFRA] disable unused-variable warnings in snippets --- doc/cookbook/simd_dna4.cpp | 2 +- doc/tutorial/04_alphabet/alphabet_main.cpp | 17 ----------------- .../06_minimisers/minimisers_snippets.cpp | 2 +- .../08_pairwise_alignment/configurations.cpp | 8 -------- .../11_read_mapper/read_mapper_step2.cpp | 6 ++++-- .../11_read_mapper/read_mapper_step3.cpp | 3 ++- test/snippet/CMakeLists.txt | 3 ++- ...nversion_from_@source_alphabet@_views.cpp.in | 2 +- .../views/detail/take_line_view_adaptor_def.cpp | 2 +- 9 files changed, 12 insertions(+), 33 deletions(-) diff --git a/doc/cookbook/simd_dna4.cpp b/doc/cookbook/simd_dna4.cpp index 228ceb7df3..26624c548b 100644 --- a/doc/cookbook/simd_dna4.cpp +++ b/doc/cookbook/simd_dna4.cpp @@ -5,5 +5,5 @@ int main() { - [[maybe_unused]] simd_dna4 letter{}; + simd_dna4 letter{}; } diff --git a/doc/tutorial/04_alphabet/alphabet_main.cpp b/doc/tutorial/04_alphabet/alphabet_main.cpp index febf89b274..7079e80924 100644 --- a/doc/tutorial/04_alphabet/alphabet_main.cpp +++ b/doc/tutorial/04_alphabet/alphabet_main.cpp @@ -115,23 +115,6 @@ int main() std::set pyrimidines{'C'_dna4, 'T'_dna4}; //! [containers] - // Prevent -Wunused-variable warnings. - (void)rank_a; - (void)rank_g; - (void)char_a; - (void)char_g; - (void)size1; - (void)size2; - (void)dna_sequence; - (void)alignment_column; - (void)pyrimidines; - (void)eq; - (void)neq; - (void)geq; - (void)gt; - (void)seq; - (void)st; - //! [closing] return 0; } diff --git a/doc/tutorial/06_minimisers/minimisers_snippets.cpp b/doc/tutorial/06_minimisers/minimisers_snippets.cpp index fc0495ae5d..5628111487 100644 --- a/doc/tutorial/06_minimisers/minimisers_snippets.cpp +++ b/doc/tutorial/06_minimisers/minimisers_snippets.cpp @@ -24,7 +24,7 @@ int main() uint64_t const seed = 0x8F3F73B5CF1C9ADE; auto minimisers = text | seqan3::views::kmer_hash(seqan3::ungapped{4}) | std::views::transform( - [seed](uint64_t i) + [](uint64_t i) { return i ^ seed; }) diff --git a/doc/tutorial/08_pairwise_alignment/configurations.cpp b/doc/tutorial/08_pairwise_alignment/configurations.cpp index 71924570e1..7f41ab248d 100644 --- a/doc/tutorial/08_pairwise_alignment/configurations.cpp +++ b/doc/tutorial/08_pairwise_alignment/configurations.cpp @@ -41,7 +41,6 @@ int main() seqan3::align_cfg::free_end_gaps_sequence1_trailing{false}, seqan3::align_cfg::free_end_gaps_sequence2_trailing{true}}; //! [method_global_free_end_gaps] - (void)config; } { @@ -57,8 +56,6 @@ int main() aa_scheme.set_similarity_matrix(seqan3::aminoacid_similarity_matrix::blosum30); auto sc_aa = aa_scheme.score('M'_aa27, 'K'_aa27); // sc_aa == 2. //! [scoring_scheme] - (void)sc_nc; - (void)sc_aa; } { @@ -71,8 +68,6 @@ int main() int open_score = affine_scheme.open_score; // == -10 int extension_score = affine_scheme.extension_score; // == -1 //! [gap_cost_affine] - (void)open_score; - (void)extension_score; } { @@ -81,7 +76,6 @@ int main() // Configure the alignment to only compute the score. auto cfg = seqan3::align_cfg::output_score{}; //! [output] - (void)cfg; } { @@ -91,7 +85,6 @@ int main() auto cfg = seqan3::align_cfg::band_fixed_size{seqan3::align_cfg::lower_diagonal{-4}, seqan3::align_cfg::upper_diagonal{4}}; //! [band] - (void)cfg; } { @@ -100,6 +93,5 @@ int main() // Configure an edit distance alignment. auto cfg = seqan3::align_cfg::method_global{} | seqan3::align_cfg::edit_scheme; //! [edit] - (void)cfg; } } diff --git a/doc/tutorial/11_read_mapper/read_mapper_step2.cpp b/doc/tutorial/11_read_mapper/read_mapper_step2.cpp index e0f030f21d..41455ae5a6 100644 --- a/doc/tutorial/11_read_mapper/read_mapper_step2.cpp +++ b/doc/tutorial/11_read_mapper/read_mapper_step2.cpp @@ -46,19 +46,21 @@ void map_reads(std::filesystem::path const & query_path, seqan3::sequence_file_input query_file_in{query_path}; + (void)sam_path; // Silence warning about unused parameter. We are not yet using `sam_path`. + seqan3::configuration const search_config = seqan3::search_cfg::max_error_total{seqan3::search_cfg::error_count{errors}} | seqan3::search_cfg::hit_all_best{}; for (auto && record : query_file_in | std::views::take(20)) { + (void)storage; // Silence warning about unused parameter. We are not yet using `storage`. + seqan3::debug_stream << "Hits:" << '\n'; for (auto && result : search(record.sequence(), index, search_config)) seqan3::debug_stream << result << '\n'; seqan3::debug_stream << "======================" << '\n'; } - (void)sam_path; // prevent unused parameter warning - (void)storage; // prevent unused parameter warning } void run_program(std::filesystem::path const & reference_path, diff --git a/doc/tutorial/11_read_mapper/read_mapper_step3.cpp b/doc/tutorial/11_read_mapper/read_mapper_step3.cpp index 24231d5f08..3c9e292b75 100644 --- a/doc/tutorial/11_read_mapper/read_mapper_step3.cpp +++ b/doc/tutorial/11_read_mapper/read_mapper_step3.cpp @@ -47,6 +47,8 @@ void map_reads(std::filesystem::path const & query_path, seqan3::sequence_file_input query_file_in{query_path}; + (void)sam_path; // Silence warning about unused parameter. We are not yet using `sam_path`. + seqan3::configuration const search_config = seqan3::search_cfg::max_error_total{seqan3::search_cfg::error_count{errors}} | seqan3::search_cfg::hit_all_best{}; @@ -79,7 +81,6 @@ void map_reads(std::filesystem::path const & query_path, } } } - (void)sam_path; // prevent unused parameter warning } //! [solution] diff --git a/test/snippet/CMakeLists.txt b/test/snippet/CMakeLists.txt index 4a01e34ad2..7bae4d6483 100644 --- a/test/snippet/CMakeLists.txt +++ b/test/snippet/CMakeLists.txt @@ -16,6 +16,7 @@ option (SEQAN3_GENERATE_SNIPPETS "Whether seqan3 snippets should be generated an add_library (snippet_main snippet_main.cpp) target_link_libraries (snippet_main PUBLIC seqan3::test gtest) +target_compile_options (snippet_main PUBLIC "-Wno-unused-variable" "-Wno-unused-but-set-variable") macro (seqan3_snippet test_name_prefix snippet snippet_base_path) seqan3_test_component (snippet_target_name "${snippet}" TARGET_NAME) @@ -24,7 +25,7 @@ macro (seqan3_snippet test_name_prefix snippet snippet_base_path) set (target "${snippet_target_name}_snippet") add_executable (${target} "${snippet_base_path}/${snippet}") - target_link_libraries (${target} PUBLIC snippet_main) + target_link_libraries (${target} PUBLIC seqan3::test snippet_main) set_target_properties (${target} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${snippet_target_path}") collect_used_snippet (${target}) diff --git a/test/snippet/alphabet/nucleotide/@target_alphabet@_implicit_conversion_from_@source_alphabet@_views.cpp.in b/test/snippet/alphabet/nucleotide/@target_alphabet@_implicit_conversion_from_@source_alphabet@_views.cpp.in index 21fce258fa..ac7a9e6387 100644 --- a/test/snippet/alphabet/nucleotide/@target_alphabet@_implicit_conversion_from_@source_alphabet@_views.cpp.in +++ b/test/snippet/alphabet/nucleotide/@target_alphabet@_implicit_conversion_from_@source_alphabet@_views.cpp.in @@ -15,7 +15,7 @@ int main() auto ${source_alphabet}_view = vector | seqan3::views::convert; - for (auto && chr: ${source_alphabet}_view) // converts lazily on-the-fly + for (auto && chr : ${source_alphabet}_view) // converts lazily on-the-fly { static_assert(std::same_as); } diff --git a/test/snippet/io/views/detail/take_line_view_adaptor_def.cpp b/test/snippet/io/views/detail/take_line_view_adaptor_def.cpp index 32c2fbeb33..26b8490c24 100644 --- a/test/snippet/io/views/detail/take_line_view_adaptor_def.cpp +++ b/test/snippet/io/views/detail/take_line_view_adaptor_def.cpp @@ -6,7 +6,7 @@ int main() { //![usage] - std::views::take_while( + auto v = std::views::take_while( [](auto const & l) { return (l != '\r') && (l != '\n'); From 16eec9bf8ce6a90687da7f1a854e834797ee0a23 Mon Sep 17 00:00:00 2001 From: Enrico Seiler Date: Mon, 13 Nov 2023 15:38:42 +0100 Subject: [PATCH 2/5] [FIX] libc+++: char_traits is only defined for character types --- .../char_operations/predicate_detail.hpp | 17 ++++++++++- .../char_operations/char_predicate.cpp | 28 +++++++++---------- 2 files changed, 30 insertions(+), 15 deletions(-) diff --git a/include/seqan3/utility/char_operations/predicate_detail.hpp b/include/seqan3/utility/char_operations/predicate_detail.hpp index 4796b94e67..8cefdc735b 100644 --- a/include/seqan3/utility/char_operations/predicate_detail.hpp +++ b/include/seqan3/utility/char_operations/predicate_detail.hpp @@ -19,6 +19,7 @@ #include #include +#include #include #include @@ -194,7 +195,21 @@ struct char_predicate_base constexpr bool operator()(value_t const val) const noexcept requires (sizeof(value_t) != 1) { - using char_trait = std::char_traits; + // std::char_traits is only guaranteed to be defined for character types. + // libc++ deprecates other specialisations in llvm-17, and removes them in llvm-18. + // We map the non-character types to corresponding chracter types. + // For example, `seqan3::is_eof(EOF)` will call this function with `value_t == int`. + // clang-format off + using char_value_t = std::conditional_t, value_t, + std::conditional_t::int_type>, char, + std::conditional_t::int_type>, wchar_t, + std::conditional_t::int_type>, char8_t, + std::conditional_t::int_type>, char16_t, + std::conditional_t::int_type>, char32_t, + void>>>>>>; + // clang-format on + static_assert(!std::same_as, "There is no valid character representation."); + using char_trait = std::char_traits; return (static_cast>(val) < 256) ? operator()(static_cast(val)) : (char_trait::eq_int_type(val, char_trait::eof())) ? derived_t::data[256] : false; diff --git a/test/snippet/utility/char_operations/char_predicate.cpp b/test/snippet/utility/char_operations/char_predicate.cpp index 5f88e1909f..92f8c633a2 100644 --- a/test/snippet/utility/char_operations/char_predicate.cpp +++ b/test/snippet/utility/char_operations/char_predicate.cpp @@ -4,55 +4,55 @@ int main() { //! [is_eof] - seqan3::is_eof(EOF); // returns true - seqan3::is_eof('C'); // returns false + static_assert(seqan3::is_eof(EOF)); + static_assert(!seqan3::is_eof('C')); //! [is_eof] //! [is_cntrl] - seqan3::is_cntrl('\0'); // returns true. + static_assert(seqan3::is_cntrl('\0')); //! [is_cntrl] //! [is_print] - seqan3::is_print(' '); // returns true. + static_assert(seqan3::is_print(' ')); //! [is_print] //! [is_space] - seqan3::is_space('\n'); // returns true. + static_assert(seqan3::is_space('\n')); //! [is_space] //! [is_blank] - seqan3::is_blank('\t'); // returns true. + static_assert(seqan3::is_blank('\t')); //! [is_blank] //! [is_graph] - seqan3::is_graph('%'); // returns true. + static_assert(seqan3::is_graph('%')); //! [is_graph] //! [is_punct] - seqan3::is_punct(':'); // returns true. + static_assert(seqan3::is_punct(':')); //! [is_punct] //! [is_alnum] - seqan3::is_alnum('9'); // returns true. + static_assert(seqan3::is_alnum('9')); //! [is_alnum] //! [is_alpha] - seqan3::is_alpha('z'); // returns true. + static_assert(seqan3::is_alpha('z')); //! [is_alpha] //! [is_upper] - seqan3::is_upper('K'); // returns true. + static_assert(seqan3::is_upper('K')); //! [is_upper] //! [is_lower] - seqan3::is_lower('a'); // returns true. + static_assert(seqan3::is_lower('a')); //! [is_lower] //! [is_digit] - seqan3::is_digit('1'); // returns true. + static_assert(seqan3::is_digit('1')); //! [is_digit] //! [is_xdigit] - seqan3::is_xdigit('e'); // returns true. + static_assert(seqan3::is_xdigit('e')); //! [is_xdigit] } From e2bbb31198178a84bd2c25472109c46aaba70aa3 Mon Sep 17 00:00:00 2001 From: Enrico Seiler Date: Mon, 13 Nov 2023 15:38:53 +0100 Subject: [PATCH 3/5] [FIX] libc+++: missing braces for pod_tuple --- include/seqan3/utility/tuple/pod_tuple.hpp | 15 ++- test/unit/utility/tuple/pod_tuple_test.cpp | 105 +++++++++++---------- 2 files changed, 67 insertions(+), 53 deletions(-) diff --git a/include/seqan3/utility/tuple/pod_tuple.hpp b/include/seqan3/utility/tuple/pod_tuple.hpp index 77ba0fe60a..ad9704a6d0 100644 --- a/include/seqan3/utility/tuple/pod_tuple.hpp +++ b/include/seqan3/utility/tuple/pod_tuple.hpp @@ -39,9 +39,7 @@ struct pod_tuple * actually enforces this on all types in the tuple (if you want to add non POD types, just use * std::tuple instead). * - * It (only) supports [aggregate initialization](https://en.cppreference.com/w/cpp/language/aggregate_initialization), - * i.e. you must use brace-initializiers and cannot - * use paranthesis. You can use seqan3::get or std::get and also + * You can use seqan3::get or std::get and also * [structured bindings](https://en.cppreference.com/w/cpp/language/declarations#Structured_binding_declaration) * to access the elements in the tuple. * @@ -57,6 +55,17 @@ struct pod_tuple type0 _head; //!\brief The rest of the elements defined as a "recursive member". pod_tuple _tail; + + constexpr pod_tuple() noexcept = default; //!< Defaulted. + constexpr pod_tuple(pod_tuple const &) noexcept = default; //!< Defaulted. + constexpr pod_tuple & operator=(pod_tuple const &) noexcept = default; //!< Defaulted. + constexpr pod_tuple(pod_tuple &&) noexcept = default; //!< Defaulted. + constexpr pod_tuple & operator=(pod_tuple &&) noexcept = default; //!< Defaulted. + constexpr ~pod_tuple() noexcept = default; //!< Defaulted. + + //!\brief Construct from arguments. + constexpr pod_tuple(type0 v0, types... args) noexcept : _head{v0}, _tail{args...} + {} //!\endcond /*!\name Comparison operators diff --git a/test/unit/utility/tuple/pod_tuple_test.cpp b/test/unit/utility/tuple/pod_tuple_test.cpp index 13d0dc7574..fff2f88ed2 100644 --- a/test/unit/utility/tuple/pod_tuple_test.cpp +++ b/test/unit/utility/tuple/pod_tuple_test.cpp @@ -9,59 +9,66 @@ #include +#include #include -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wmissing-braces" +using tuple_t = seqan3::pod_tuple; + +TEST(pod_tuple, concepts) +{ + EXPECT_TRUE(seqan3::trivial); + EXPECT_TRUE(seqan3::standard_layout); +} // default/zero construction -TEST(pod_tuple_ctr, ctr) +TEST(pod_tuple, ctr) { - [[maybe_unused]] seqan3::pod_tuple t1; + [[maybe_unused]] tuple_t t1; } // aggregate initialization -TEST(pod_tuple_aggr, aggr) +TEST(pod_tuple, aggr) { - [[maybe_unused]] seqan3::pod_tuple t1{4, 7l, 3.0f}; + [[maybe_unused]] tuple_t t1{4, 7l, 3.0f}; + [[maybe_unused]] tuple_t t2(4, 7l, 3.0f); } // zero initialization -TEST(pod_tuple_zro, zro) +TEST(pod_tuple, zro) { - seqan3::pod_tuple t1{0, 0, 0}; - seqan3::pod_tuple t2{}; + tuple_t t1{0, 0, 0}; + tuple_t t2{}; EXPECT_EQ(t1, t2); } // copy construction -TEST(pod_tuple_cp_ctr, cp_ctr) +TEST(pod_tuple, cp_ctr) { - seqan3::pod_tuple t1{4, 7l, 3.0f}; - seqan3::pod_tuple t2{t1}; - seqan3::pod_tuple t3(t1); + tuple_t t1{4, 7l, 3.0f}; + tuple_t t2{t1}; + tuple_t t3(t1); EXPECT_EQ(t1, t2); EXPECT_EQ(t2, t3); } // move construction -TEST(pod_tuple_mv_ctr, mv_ctr) +TEST(pod_tuple, mv_ctr) { - seqan3::pod_tuple t0{4, 7l, 3.0f}; - seqan3::pod_tuple t1{4, 7l, 3.0f}; - seqan3::pod_tuple t2{std::move(t1)}; + tuple_t t0{4, 7l, 3.0f}; + tuple_t t1{4, 7l, 3.0f}; + tuple_t t2{std::move(t1)}; EXPECT_EQ(t2, t0); - seqan3::pod_tuple t3(std::move(t2)); + tuple_t t3(std::move(t2)); EXPECT_EQ(t3, t0); } // copy assignment -TEST(pod_tuple_cp_assgn, cp_assgn) +TEST(pod_tuple, cp_assgn) { - seqan3::pod_tuple t1{4, 7l, 3.0f}; - seqan3::pod_tuple t2; - seqan3::pod_tuple t3; + tuple_t t1{4, 7l, 3.0f}; + tuple_t t2; + tuple_t t3; t2 = t1; t3 = t1; @@ -70,12 +77,12 @@ TEST(pod_tuple_cp_assgn, cp_assgn) } // move assignment -TEST(pod_tuple_mv_assgn, mv_assgn) +TEST(pod_tuple, mv_assgn) { - seqan3::pod_tuple t0{4, 7l, 3.0f}; - seqan3::pod_tuple t1{4, 7l, 3.0f}; - seqan3::pod_tuple t2; - seqan3::pod_tuple t3; + tuple_t t0{4, 7l, 3.0f}; + tuple_t t1{4, 7l, 3.0f}; + tuple_t t2; + tuple_t t3; t2 = std::move(t1); EXPECT_EQ(t2, t0); t3 = std::move(t2); @@ -83,12 +90,12 @@ TEST(pod_tuple_mv_assgn, mv_assgn) } // swap -TEST(pod_tuple_swap, swap) +TEST(pod_tuple, swap) { - seqan3::pod_tuple t0{4, 7l, 3.0f}; - seqan3::pod_tuple t1{4, 7l, 3.0f}; - seqan3::pod_tuple t2{}; - seqan3::pod_tuple t3{}; + tuple_t t0{4, 7l, 3.0f}; + tuple_t t1{4, 7l, 3.0f}; + tuple_t t2{}; + tuple_t t3{}; std::swap(t1, t2); EXPECT_EQ(t2, t0); @@ -96,9 +103,9 @@ TEST(pod_tuple_swap, swap) } // get<1> -TEST(pod_tuple_get_i, get_i) +TEST(pod_tuple, get_i) { - seqan3::pod_tuple t0{4, 7l, 3.0f}; + tuple_t t0{4, 7l, 3.0f}; static_assert(std::is_same_v(t0)), int &>); static_assert(std::is_same_v(t0)), long &>); @@ -111,7 +118,7 @@ TEST(pod_tuple_get_i, get_i) // std::get<1> TEST(pod_tuple, stdget_i) { - seqan3::pod_tuple t0{4, 7l, 3.0f}; + tuple_t t0{4, 7l, 3.0f}; static_assert(std::is_same_v(t0)), int &>); static_assert(std::is_same_v(t0)), long &>); @@ -122,9 +129,9 @@ TEST(pod_tuple, stdget_i) } // structured bindings -TEST(pod_tuple_struct_binding, struct_binding) +TEST(pod_tuple, struct_binding) { - seqan3::pod_tuple t0{4, 7l, 3.0f}; + tuple_t t0{4, 7l, 3.0f}; auto [i, l, f] = t0; EXPECT_EQ(i, 4); @@ -133,9 +140,9 @@ TEST(pod_tuple_struct_binding, struct_binding) } // get -TEST(pod_tuple_get_type, get_type) +TEST(pod_tuple, get_type) { - using pt = seqan3::pod_tuple; + using pt = tuple_t; using ptc = pt const; pt t0{4, 7l, 3.0f}; ptc t1{4, 7l, 3.0f}; @@ -174,9 +181,9 @@ TEST(pod_tuple_get_type, get_type) } // std::get -TEST(pod_tuple_get_type, stdget_type) +TEST(pod_tuple, stdget_type) { - using pt = seqan3::pod_tuple; + using pt = tuple_t; using ptc = pt const; pt t0{4, 7l, 3.0f}; ptc t1{4, 7l, 3.0f}; @@ -215,9 +222,9 @@ TEST(pod_tuple_get_type, stdget_type) } // std::tuple_element -TEST(pod_tuple_tuple_element, tuple_element) +TEST(pod_tuple, tuple_element) { - using pt = seqan3::pod_tuple; + using pt = tuple_t; static_assert(std::is_same_v, int>); static_assert(std::is_same_v, long>); @@ -226,7 +233,7 @@ TEST(pod_tuple_tuple_element, tuple_element) } // type deduction -TEST(pod_tuple_type_deduce, type_deduce) +TEST(pod_tuple, type_deduce) { seqan3::pod_tuple t0{4, 7l, 3.0f}; using pt = decltype(t0); @@ -237,11 +244,11 @@ TEST(pod_tuple_type_deduce, type_deduce) } // comparison operators -TEST(pod_tuple_cmp, cmp) +TEST(pod_tuple, cmp) { - seqan3::pod_tuple t0{4, 6l, 4.0f}; - seqan3::pod_tuple t1{4, 7l, 3.0f}; - seqan3::pod_tuple t2{4, 7l, 4.0f}; + tuple_t t0{4, 6l, 4.0f}; + tuple_t t1{4, 7l, 3.0f}; + tuple_t t2{4, 7l, 4.0f}; EXPECT_LT(t0, t1); EXPECT_LE(t0, t1); @@ -251,5 +258,3 @@ TEST(pod_tuple_cmp, cmp) EXPECT_GE(t2, t1); EXPECT_GT(t2, t1); } - -#pragma GCC diagnostic pop From 304325784cf3f72ff1349f9bc2b800bdd56eeb6f Mon Sep 17 00:00:00 2001 From: Enrico Seiler Date: Mon, 13 Nov 2023 15:39:05 +0100 Subject: [PATCH 4/5] [FIX] libc+++: std::abs is not constexpr --- .../utility/type_pack/detail/type_pack_algorithm_all_of.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/snippet/utility/type_pack/detail/type_pack_algorithm_all_of.cpp b/test/snippet/utility/type_pack/detail/type_pack_algorithm_all_of.cpp index b8daf9cdb5..8f2ad2aef4 100644 --- a/test/snippet/utility/type_pack/detail/type_pack_algorithm_all_of.cpp +++ b/test/snippet/utility/type_pack/detail/type_pack_algorithm_all_of.cpp @@ -17,7 +17,7 @@ auto fn = [](auto value) else if constexpr (std::is_same_v) return value == 3; else if constexpr (std::is_same_v) - return std::abs(value - 1.2) < 0.00001; + return value - 1.2 < 0.00001; else return false; }; From 73a6ae0b0fbd04bff6a46500ad51c2f3e812fd8c Mon Sep 17 00:00:00 2001 From: Enrico Seiler Date: Mon, 13 Nov 2023 15:40:21 +0100 Subject: [PATCH 5/5] [INFRA] Add libc++ snippet test CI --- .github/workflows/ci_misc.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/workflows/ci_misc.yml b/.github/workflows/ci_misc.yml index dbbce8fdcd..ac18df6295 100644 --- a/.github/workflows/ci_misc.yml +++ b/.github/workflows/ci_misc.yml @@ -31,6 +31,13 @@ jobs: fail-fast: false matrix: include: + - name: "Snippet clang17 libc++" + compiler: "clang-17" + build: snippet + build_type: Release + test_threads: 1 # snippets create and delete files and some separate tests create/delete the same files + cxx_flags: "-stdlib=libc++" + - name: "Snippet gcc11" compiler: "gcc-11" build: snippet