From 189ba0e83da69cd0a37ad3a55f61a754d6cbf489 Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Tue, 16 May 2023 22:16:21 +0300 Subject: [PATCH] Add test for mp_insert with value lists. Refs #53. --- test/Jamfile | 1 + test/mp_insert_2.cpp | 119 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 120 insertions(+) create mode 100644 test/mp_insert_2.cpp diff --git a/test/Jamfile b/test/Jamfile index 561073c..335c812 100644 --- a/test/Jamfile +++ b/test/Jamfile @@ -133,6 +133,7 @@ run mp_replace_at.cpp ; run mp_replace_at_c.cpp ; run mp_for_each.cpp ; run mp_insert.cpp ; +run mp_insert_2.cpp ; run mp_erase.cpp ; run mp_erase_2.cpp ; run mp_with_index.cpp ; diff --git a/test/mp_insert_2.cpp b/test/mp_insert_2.cpp new file mode 100644 index 0000000..2b15fe7 --- /dev/null +++ b/test/mp_insert_2.cpp @@ -0,0 +1,119 @@ +// Copyright 2023 Peter Dimov +// Distributed under the Boost Software License, Version 1.0. +// https://www.boost.org/LICENSE_1_0.txt + +#include +#include +#include + +#if !defined(BOOST_MP11_HAS_TEMPLATE_AUTO) + +#pragma message("Test skipped because BOOST_MP11_HAS_TEMPLATE_AUTO is not defined") +int main() {} + +#else + +#include + +template struct V1 {}; +template struct V2 {}; + +int main() +{ + using boost::mp11::mp_insert; + using boost::mp11::mp_insert_c; + using boost::mp11::mp_size_t; + using boost::mp11::mp_false; + using boost::mp11::mp_true; + using boost::mp11::mp_int; + + { + using L1 = V1<>; + + BOOST_TEST_TRAIT_SAME(mp_insert_c, L1); + BOOST_TEST_TRAIT_SAME(mp_insert>, L1); + + BOOST_TEST_TRAIT_SAME(mp_insert_c, V1); + BOOST_TEST_TRAIT_SAME(mp_insert, mp_false>, V1); + + BOOST_TEST_TRAIT_SAME(mp_insert_c, V1); + BOOST_TEST_TRAIT_SAME(mp_insert, mp_false, mp_true>, V1); + + using L2 = V1<1, 2, 3, 4, 5>; + + BOOST_TEST_TRAIT_SAME(mp_insert_c, L2); + BOOST_TEST_TRAIT_SAME(mp_insert_c, L2); + BOOST_TEST_TRAIT_SAME(mp_insert_c, L2); + BOOST_TEST_TRAIT_SAME(mp_insert_c, L2); + BOOST_TEST_TRAIT_SAME(mp_insert_c, L2); + BOOST_TEST_TRAIT_SAME(mp_insert_c, L2); + + BOOST_TEST_TRAIT_SAME(mp_insert_c, V1); + BOOST_TEST_TRAIT_SAME(mp_insert_c, V1<1, false, true, 2, 3, 4, 5>); + BOOST_TEST_TRAIT_SAME(mp_insert_c, V1<1, 2, false, true, 3, 4, 5>); + BOOST_TEST_TRAIT_SAME(mp_insert_c, V1<1, 2, 3, false, true, 4, 5>); + BOOST_TEST_TRAIT_SAME(mp_insert_c, V1<1, 2, 3, 4, false, true, 5>); + BOOST_TEST_TRAIT_SAME(mp_insert_c, V1<1, 2, 3, 4, 5, false, true>); + + BOOST_TEST_TRAIT_SAME(mp_insert>, L2); + BOOST_TEST_TRAIT_SAME(mp_insert>, L2); + BOOST_TEST_TRAIT_SAME(mp_insert>, L2); + BOOST_TEST_TRAIT_SAME(mp_insert>, L2); + BOOST_TEST_TRAIT_SAME(mp_insert>, L2); + BOOST_TEST_TRAIT_SAME(mp_insert>, L2); + + BOOST_TEST_TRAIT_SAME(mp_insert, mp_false, mp_true>, V1); + BOOST_TEST_TRAIT_SAME(mp_insert, mp_false, mp_true>, V1<1, false, true, 2, 3, 4, 5>); + BOOST_TEST_TRAIT_SAME(mp_insert, mp_false, mp_true>, V1<1, 2, false, true, 3, 4, 5>); + BOOST_TEST_TRAIT_SAME(mp_insert, mp_false, mp_true>, V1<1, 2, 3, false, true, 4, 5>); + BOOST_TEST_TRAIT_SAME(mp_insert, mp_false, mp_true>, V1<1, 2, 3, 4, false, true, 5>); + BOOST_TEST_TRAIT_SAME(mp_insert, mp_false, mp_true>, V1<1, 2, 3, 4, 5, false, true>); + } + + { + using L1 = V2<>; + + BOOST_TEST_TRAIT_SAME(mp_insert_c, L1); + BOOST_TEST_TRAIT_SAME(mp_insert>, L1); + + BOOST_TEST_TRAIT_SAME(mp_insert_c>, V2<-1>); + BOOST_TEST_TRAIT_SAME(mp_insert, mp_int<-1>>, V2<-1>); + + BOOST_TEST_TRAIT_SAME(mp_insert_c, mp_int<-2>>, V2<-1, -2>); + BOOST_TEST_TRAIT_SAME(mp_insert, mp_int<-1>, mp_int<-2>>, V2<-1, -2>); + + using L2 = V2<1, 2, 3, 4, 5>; + + BOOST_TEST_TRAIT_SAME(mp_insert_c, L2); + BOOST_TEST_TRAIT_SAME(mp_insert_c, L2); + BOOST_TEST_TRAIT_SAME(mp_insert_c, L2); + BOOST_TEST_TRAIT_SAME(mp_insert_c, L2); + BOOST_TEST_TRAIT_SAME(mp_insert_c, L2); + BOOST_TEST_TRAIT_SAME(mp_insert_c, L2); + + BOOST_TEST_TRAIT_SAME(mp_insert_c, mp_int<-2>>, V2<-1, -2, 1, 2, 3, 4, 5>); + BOOST_TEST_TRAIT_SAME(mp_insert_c, mp_int<-2>>, V2<1, -1, -2, 2, 3, 4, 5>); + BOOST_TEST_TRAIT_SAME(mp_insert_c, mp_int<-2>>, V2<1, 2, -1, -2, 3, 4, 5>); + BOOST_TEST_TRAIT_SAME(mp_insert_c, mp_int<-2>>, V2<1, 2, 3, -1, -2, 4, 5>); + BOOST_TEST_TRAIT_SAME(mp_insert_c, mp_int<-2>>, V2<1, 2, 3, 4, -1, -2, 5>); + BOOST_TEST_TRAIT_SAME(mp_insert_c, mp_int<-2>>, V2<1, 2, 3, 4, 5, -1, -2>); + + BOOST_TEST_TRAIT_SAME(mp_insert>, L2); + BOOST_TEST_TRAIT_SAME(mp_insert>, L2); + BOOST_TEST_TRAIT_SAME(mp_insert>, L2); + BOOST_TEST_TRAIT_SAME(mp_insert>, L2); + BOOST_TEST_TRAIT_SAME(mp_insert>, L2); + BOOST_TEST_TRAIT_SAME(mp_insert>, L2); + + BOOST_TEST_TRAIT_SAME(mp_insert, mp_int<-1>, mp_int<-2>>, V2<-1, -2, 1, 2, 3, 4, 5>); + BOOST_TEST_TRAIT_SAME(mp_insert, mp_int<-1>, mp_int<-2>>, V2<1, -1, -2, 2, 3, 4, 5>); + BOOST_TEST_TRAIT_SAME(mp_insert, mp_int<-1>, mp_int<-2>>, V2<1, 2, -1, -2, 3, 4, 5>); + BOOST_TEST_TRAIT_SAME(mp_insert, mp_int<-1>, mp_int<-2>>, V2<1, 2, 3, -1, -2, 4, 5>); + BOOST_TEST_TRAIT_SAME(mp_insert, mp_int<-1>, mp_int<-2>>, V2<1, 2, 3, 4, -1, -2, 5>); + BOOST_TEST_TRAIT_SAME(mp_insert, mp_int<-1>, mp_int<-2>>, V2<1, 2, 3, 4, 5, -1, -2>); + } + + return boost::report_errors(); +} + +#endif