//===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // UNSUPPORTED: c++03, c++11, c++14 // template>, // class Allocator = allocator>> // map(InputIterator, InputIterator, // Compare = Compare(), Allocator = Allocator()) // -> map, Compare, Allocator>; // template, class Allocator = allocator> // map(initializer_list, Compare = Compare(), Allocator = Allocator()) // -> map; // template // map(InputIterator, InputIterator, Allocator) // -> map, less>, Allocator>; // template // map(initializer_list, Allocator) // -> map, Allocator>; #include // std::equal #include #include // INT_MAX #include #include #include #include #include "test_allocator.h" using P = std::pair; using PC = std::pair; using PCC = std::pair; int main(int, char**) { { const PCC arr[] = { {1,1L}, {2,2L}, {1,1L}, {INT_MAX,1L}, {3,1L} }; std::map m(std::begin(arr), std::end(arr)); ASSERT_SAME_TYPE(decltype(m), std::map); const PCC expected_m[] = { {1,1L}, {2,2L}, {3,1L}, {INT_MAX,1L} }; assert(std::equal(m.begin(), m.end(), std::begin(expected_m), std::end(expected_m))); } { const PCC arr[] = { {1,1L}, {2,2L}, {1,1L}, {INT_MAX,1L}, {3,1L} }; std::map m(std::begin(arr), std::end(arr), std::greater()); ASSERT_SAME_TYPE(decltype(m), std::map>); const PCC expected_m[] = { {INT_MAX,1L}, {3,1L}, {2,2L}, {1, 1L} }; assert(std::equal(m.begin(), m.end(), std::begin(expected_m), std::end(expected_m))); } { const PCC arr[] = { {1,1L}, {2,2L}, {1,1L}, {INT_MAX,1L}, {3,1L} }; std::map m(std::begin(arr), std::end(arr), std::greater(), test_allocator(0, 42)); ASSERT_SAME_TYPE(decltype(m), std::map, test_allocator>); const PCC expected_m[] = { {INT_MAX,1L}, {3,1L}, {2,2L}, {1, 1L} }; assert(std::equal(m.begin(), m.end(), std::begin(expected_m), std::end(expected_m))); assert(m.get_allocator().get_id() == 42); } { std::map m{ PC{1,1L}, PC{2,2L}, PC{1,1L}, PC{INT_MAX,1L}, PC{3,1L} }; ASSERT_SAME_TYPE(decltype(m), std::map); const PC expected_m[] = { {1, 1L}, {2,2L}, {3,1L}, {INT_MAX,1L} }; assert(std::equal(m.begin(), m.end(), std::begin(expected_m), std::end(expected_m))); } { std::map m({ PC{1,1L}, PC{2,2L}, PC{1,1L}, PC{INT_MAX,1L}, PC{3,1L} }, std::greater()); ASSERT_SAME_TYPE(decltype(m), std::map>); const PC expected_m[] = { {INT_MAX,1L}, {3,1L}, {2,2L}, {1, 1L} }; assert(std::equal(m.begin(), m.end(), std::begin(expected_m), std::end(expected_m))); } { std::map m({ PC{1,1L}, PC{2,2L}, PC{1,1L}, PC{INT_MAX,1L}, PC{3,1L} }, std::greater(), test_allocator(0, 43)); ASSERT_SAME_TYPE(decltype(m), std::map, test_allocator>); const PC expected_m[] = { {INT_MAX,1L}, {3,1L}, {2,2L}, {1, 1L} }; assert(std::equal(m.begin(), m.end(), std::begin(expected_m), std::end(expected_m))); assert(m.get_allocator().get_id() == 43); } { std::map m({ PC{1,1L}, PC{2,2L}, PC{1,1L}, PC{INT_MAX,1L}, PC{3,1L} }, test_allocator(0, 45)); ASSERT_SAME_TYPE(decltype(m), std::map, test_allocator>); const PC expected_m[] = { {1, 1L}, {2,2L}, {3,1L}, {INT_MAX,1L} }; assert(std::equal(m.begin(), m.end(), std::begin(expected_m), std::end(expected_m))); assert(m.get_allocator().get_id() == 45); } return 0; }