From e1a3501a78e85bb83bbfe0448ce229add4b24e32 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Fri, 16 Aug 2024 10:52:32 +0200 Subject: [PATCH 1/2] Rename test_equals_none to test_cmp_none In order to add more tests the new name is more fitting. --- test/Jamfile.v2 | 2 +- ...optional_test_equals_none.cpp => optional_test_cmp_none.cpp} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename test/{optional_test_equals_none.cpp => optional_test_cmp_none.cpp} (100%) diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index 00bf152..de84f2e 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -42,7 +42,7 @@ run optional_test_inplace_factory.cpp ; run optional_test_io.cpp ; run optional_test_move.cpp ; run optional_test_noexcept_move.cpp ; -run optional_test_equals_none.cpp ; +run optional_test_cmp_none.cpp ; run optional_test_value_access.cpp ; run optional_test_emplace.cpp ; run optional_test_minimum_requirements.cpp ; diff --git a/test/optional_test_equals_none.cpp b/test/optional_test_cmp_none.cpp similarity index 100% rename from test/optional_test_equals_none.cpp rename to test/optional_test_cmp_none.cpp From 5fa59b9a3533a017dd30c9536255252c253f229c Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Fri, 16 Aug 2024 11:13:45 +0200 Subject: [PATCH 2/2] Add test for all relational operators to `boost::none` --- test/optional_test_cmp_none.cpp | 40 +++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/test/optional_test_cmp_none.cpp b/test/optional_test_cmp_none.cpp index 1e3157b..691517b 100644 --- a/test/optional_test_cmp_none.cpp +++ b/test/optional_test_cmp_none.cpp @@ -1,4 +1,5 @@ // Copyright (C) 2014 Andrzej Krzemienski. +// Copyright (C) 2024 Alexander Grund // // Use, modification, and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at @@ -36,6 +37,45 @@ void test_equal_to_none_of_noncomparable_T() BOOST_TEST(boost::none == o); } +void test_comparison_to_none() +{ + using boost::none; + boost::optional i = SemiRegular(); + // the default ordering of optional is{ boost::none, 0, 1, 2, ... } + // Hence boost::none < i for any engaged i + // and all others operators ( ==, !=, <, <=, >, >= ) follow + + BOOST_TEST(!(i == none)); + BOOST_TEST(i != none); + BOOST_TEST(!(i < none)); + BOOST_TEST(!(i <= none)); + BOOST_TEST(i > none); + BOOST_TEST(i >= none); + // Comparison is symmetric + BOOST_TEST(!(none == i)); + BOOST_TEST(none != i); + BOOST_TEST(none < i); + BOOST_TEST(none <= i); + BOOST_TEST(!(none > i)); + BOOST_TEST(!(none >= i)); + + // An un-engaged optional is always equal to none + boost::optional o; + BOOST_TEST(o == none); + BOOST_TEST(!(o != none)); + BOOST_TEST(!(o < none)); + BOOST_TEST(o <= none); + BOOST_TEST(!(o > none)); + BOOST_TEST(o >= none); + // Comparison is symmetric + BOOST_TEST(none == o); + BOOST_TEST(!(none != o)); + BOOST_TEST(!(none < o)); + BOOST_TEST(none <= o); + BOOST_TEST(!(none > o)); + BOOST_TEST(none >= o); +} + int main() { test_equal_to_none_of_noncomparable_T();