diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index accdd1a..9db0c01 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -24,6 +24,9 @@ import testing ; [ run optional_test_ref_assign_mutable_int.cpp ] [ run optional_test_ref_assign_const_int.cpp ] [ run optional_test_ref_converting_ctor.cpp ] + [ run optional_test_ref_convert_assign_non_int.cpp ] + [ run optional_test_ref_convert_assign_mutable_int.cpp ] + [ run optional_test_ref_convert_assign_const_int.cpp ] [ run optional_test_ref_portable_minimum.cpp ] [ run optional_test_inplace_factory.cpp ] [ run optional_test_io.cpp ] diff --git a/test/optional_ref_assign_test_defs.hpp b/test/optional_ref_assign_test_defs.hpp index 1dc9643..292d0fc 100644 --- a/test/optional_ref_assign_test_defs.hpp +++ b/test/optional_ref_assign_test_defs.hpp @@ -22,6 +22,7 @@ using boost::optional; using boost::none; +using boost::addressof; template void test_copy_assignment_for_const() @@ -32,7 +33,7 @@ void test_copy_assignment_for_const() BOOST_TEST(o); BOOST_TEST(o != none); - BOOST_TEST(boost::addressof(*o) == boost::addressof(v)); + BOOST_TEST(addressof(*o) == addressof(v)); BOOST_TEST(val(*o) == val(v)); BOOST_TEST(val(*o) == 2); } @@ -46,12 +47,12 @@ void test_copy_assignment_for_noconst_const() BOOST_TEST(o); BOOST_TEST(o != none); - BOOST_TEST(boost::addressof(*o) == boost::addressof(v)); + BOOST_TEST(addressof(*o) == addressof(v)); BOOST_TEST(val(*o) == val(v)); BOOST_TEST(val(*o) == 2); val(v) = 9; - BOOST_TEST(boost::addressof(*o) == boost::addressof(v)); + BOOST_TEST(addressof(*o) == addressof(v)); BOOST_TEST_EQ(val(*o), val(v)); BOOST_TEST_EQ(val(*o), 9); BOOST_TEST_EQ(val(v), 9); @@ -66,18 +67,18 @@ void test_copy_assignment_for() BOOST_TEST(o); BOOST_TEST(o != none); - BOOST_TEST(boost::addressof(*o) == boost::addressof(v)); + BOOST_TEST(addressof(*o) == addressof(v)); BOOST_TEST(val(*o) == val(v)); BOOST_TEST(val(*o) == 2); val(v) = 9; - BOOST_TEST(boost::addressof(*o) == boost::addressof(v)); + BOOST_TEST(addressof(*o) == addressof(v)); BOOST_TEST_EQ(val(*o), val(v)); BOOST_TEST_EQ(val(*o), 9); BOOST_TEST_EQ(val(v), 9); val(*o) = 7; - BOOST_TEST(boost::addressof(*o) == boost::addressof(v)); + BOOST_TEST(addressof(*o) == addressof(v)); BOOST_TEST_EQ(val(*o), val(v)); BOOST_TEST_EQ(val(*o), 7); BOOST_TEST_EQ(val(v), 7); @@ -90,7 +91,7 @@ void test_rebinding_assignment_semantics_const() optional o(v); BOOST_TEST(o); - BOOST_TEST(boost::addressof(*o) == boost::addressof(v)); + BOOST_TEST(addressof(*o) == addressof(v)); BOOST_TEST_EQ(val(*o), val(v)); BOOST_TEST_EQ(val(*o), 2); @@ -98,11 +99,11 @@ void test_rebinding_assignment_semantics_const() BOOST_TEST_EQ(val(v), 2); BOOST_TEST(o); - BOOST_TEST(boost::addressof(*o) != boost::addressof(v)); + BOOST_TEST(addressof(*o) != addressof(v)); BOOST_TEST_NE(val(*o), val(v)); BOOST_TEST_NE(val(*o), 2); - BOOST_TEST(boost::addressof(*o) == boost::addressof(w)); + BOOST_TEST(addressof(*o) == addressof(w)); BOOST_TEST_EQ(val(*o), val(w)); BOOST_TEST_EQ(val(*o), 7); } @@ -114,7 +115,7 @@ void test_rebinding_assignment_semantics_noconst_const() optional o(v); BOOST_TEST(o); - BOOST_TEST(boost::addressof(*o) == boost::addressof(v)); + BOOST_TEST(addressof(*o) == addressof(v)); BOOST_TEST_EQ(val(*o), val(v)); BOOST_TEST_EQ(val(*o), 2); @@ -122,11 +123,11 @@ void test_rebinding_assignment_semantics_noconst_const() BOOST_TEST_EQ(val(v), 2); BOOST_TEST(o); - BOOST_TEST(boost::addressof(*o) != boost::addressof(v)); + BOOST_TEST(addressof(*o) != addressof(v)); BOOST_TEST_NE(val(*o), val(v)); BOOST_TEST_NE(val(*o), 2); - BOOST_TEST(boost::addressof(*o) == boost::addressof(w)); + BOOST_TEST(addressof(*o) == addressof(w)); BOOST_TEST_EQ(val(*o), val(w)); BOOST_TEST_EQ(val(*o), 7); } @@ -138,7 +139,7 @@ void test_rebinding_assignment_semantics() optional o(v); BOOST_TEST(o); - BOOST_TEST(boost::addressof(*o) == boost::addressof(v)); + BOOST_TEST(addressof(*o) == addressof(v)); BOOST_TEST_EQ(val(*o), val(v)); BOOST_TEST_EQ(val(*o), 2); @@ -146,21 +147,51 @@ void test_rebinding_assignment_semantics() BOOST_TEST_EQ(val(v), 2); BOOST_TEST(o); - BOOST_TEST(boost::addressof(*o) != boost::addressof(v)); + BOOST_TEST(addressof(*o) != addressof(v)); BOOST_TEST_NE(val(*o), val(v)); BOOST_TEST_NE(val(*o), 2); - BOOST_TEST(boost::addressof(*o) == boost::addressof(w)); + BOOST_TEST(addressof(*o) == addressof(w)); BOOST_TEST_EQ(val(*o), val(w)); BOOST_TEST_EQ(val(*o), 7); val(*o) = 8; - BOOST_TEST(boost::addressof(*o) == boost::addressof(w)); + BOOST_TEST(addressof(*o) == addressof(w)); BOOST_TEST_EQ(val(*o), val(w)); BOOST_TEST_EQ(val(*o), 8); BOOST_TEST_EQ(val(w), 8); BOOST_TEST_EQ(val(v), 2); } +template +void test_converting_assignment() +{ + typename concrete_type_of::type v1(1), v2(2), v3(3); + optional oA(v1), oB(none); + + oA = v2; + BOOST_TEST(oA); + BOOST_TEST(addressof(*oA) == addressof(v2)); + + oB = v3; + BOOST_TEST(oB); + BOOST_TEST(addressof(*oB) == addressof(v3)); +} + +template +void test_converting_assignment_for_noconst_const() +{ + typename concrete_type_of::type v1(1), v2(2), v3(3); + optional oA(v1), oB(none); + + oA = v2; + BOOST_TEST(oA); + BOOST_TEST(addressof(*oA) == addressof(v2)); + + oB = v3; + BOOST_TEST(oB); + BOOST_TEST(addressof(*oB) == addressof(v3)); +} + #endif //BOOST_OPTIONAL_TEST_OPTIONAL_REF_ASSIGN_TEST_DEFS_AK_07JAN2015_HPP diff --git a/test/optional_test_ref_convert_assign_const_int.cpp b/test/optional_test_ref_convert_assign_const_int.cpp new file mode 100644 index 0000000..30d37a6 --- /dev/null +++ b/test/optional_test_ref_convert_assign_const_int.cpp @@ -0,0 +1,30 @@ +// Copyright (C) 2015 Andrzej Krzemienski. +// +// Use, modification, and distribution is subject to 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 http://www.boost.org/lib/optional for documentation. +// +// You are welcome to contact the author at: akrzemi1@gmail.com + + +#include "boost/optional/optional.hpp" + +#ifdef __BORLANDC__ +#pragma hdrstop +#endif + +#include "boost/core/addressof.hpp" +#include "boost/core/enable_if.hpp" +#include "boost/core/lightweight_test.hpp" +#include "testable_classes.hpp" +#include "optional_ref_assign_test_defs.hpp" + +int main() +{ + test_converting_assignment(); + test_converting_assignment_for_noconst_const(); + + return boost::report_errors(); +} diff --git a/test/optional_test_ref_convert_assign_mutable_int.cpp b/test/optional_test_ref_convert_assign_mutable_int.cpp new file mode 100644 index 0000000..4338e52 --- /dev/null +++ b/test/optional_test_ref_convert_assign_mutable_int.cpp @@ -0,0 +1,29 @@ +// Copyright (C) 2015 Andrzej Krzemienski. +// +// Use, modification, and distribution is subject to 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 http://www.boost.org/lib/optional for documentation. +// +// You are welcome to contact the author at: akrzemi1@gmail.com + + +#include "boost/optional/optional.hpp" + +#ifdef __BORLANDC__ +#pragma hdrstop +#endif + +#include "boost/core/addressof.hpp" +#include "boost/core/enable_if.hpp" +#include "boost/core/lightweight_test.hpp" +#include "testable_classes.hpp" +#include "optional_ref_assign_test_defs.hpp" + +int main() +{ + test_converting_assignment(); + + return boost::report_errors(); +} diff --git a/test/optional_test_ref_convert_assign_non_int.cpp b/test/optional_test_ref_convert_assign_non_int.cpp new file mode 100644 index 0000000..d59e46e --- /dev/null +++ b/test/optional_test_ref_convert_assign_non_int.cpp @@ -0,0 +1,39 @@ +// Copyright (C) 2015 Andrzej Krzemienski. +// +// Use, modification, and distribution is subject to 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 http://www.boost.org/lib/optional for documentation. +// +// You are welcome to contact the author at: akrzemi1@gmail.com + + +#include "boost/optional/optional.hpp" + +#ifdef __BORLANDC__ +#pragma hdrstop +#endif + +#include "boost/core/addressof.hpp" +#include "boost/core/enable_if.hpp" +#include "boost/core/lightweight_test.hpp" +#include "testable_classes.hpp" +#include "optional_ref_assign_test_defs.hpp" + + +template +void test_all_const_cases() +{ + test_converting_assignment(); + test_converting_assignment(); + test_converting_assignment_for_noconst_const(); +} + +int main() +{ + test_all_const_cases(); + //test_all_const_cases(); + + return boost::report_errors(); +}