//===----------------------------------------------------------------------===// // // 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 // //===----------------------------------------------------------------------===// // // class map // mapped_type& operator[](const key_type& k); #include #include #include "test_macros.h" #include "count_new.h" #include "min_allocator.h" #include "private_constructor.h" #if TEST_STD_VER >= 11 #include "container_test_types.h" #endif int main(int, char**) { { typedef std::pair V; V ar[] = { V(1, 1.5), V(2, 2.5), V(3, 3.5), V(4, 4.5), V(5, 5.5), V(7, 7.5), V(8, 8.5), }; std::map m(ar, ar+sizeof(ar)/sizeof(ar[0])); assert(m.size() == 7); assert(m[1] == 1.5); assert(m.size() == 7); m[1] = -1.5; assert(m[1] == -1.5); assert(m.size() == 7); assert(m[6] == 0); assert(m.size() == 8); m[6] = 6.5; assert(m[6] == 6.5); assert(m.size() == 8); } #if TEST_STD_VER >= 11 { typedef std::pair V; V ar[] = { V(1, 1.5), V(2, 2.5), V(3, 3.5), V(4, 4.5), V(5, 5.5), V(7, 7.5), V(8, 8.5), }; std::map, min_allocator> m(ar, ar+sizeof(ar)/sizeof(ar[0])); assert(m.size() == 7); assert(m[1] == 1.5); assert(m.size() == 7); const int i = 1; m[i] = -1.5; assert(m[1] == -1.5); assert(m.size() == 7); assert(m[6] == 0); assert(m.size() == 8); m[6] = 6.5; assert(m[6] == 6.5); assert(m.size() == 8); } { // Use "container_test_types.h" to check what arguments get passed // to the allocator for operator[] using Container = TCT::map<>; using Key = Container::key_type; using MappedType = Container::mapped_type; ConstructController* cc = getConstructController(); cc->reset(); { Container c; const Key k(1); cc->expect&&, std::tuple<>&&>(); MappedType& mref = c[k]; assert(!cc->unchecked()); { DisableAllocationGuard g; MappedType& mref2 = c[k]; assert(&mref == &mref2); } } { Container c; Key k(1); cc->expect&&, std::tuple<>&&>(); MappedType& mref = c[k]; assert(!cc->unchecked()); { DisableAllocationGuard g; MappedType& mref2 = c[k]; assert(&mref == &mref2); } } } #endif #if TEST_STD_VER > 11 { typedef std::pair V; V ar[] = { V(1, 1.5), V(2, 2.5), V(3, 3.5), V(4, 4.5), V(5, 5.5), V(7, 7.5), V(8, 8.5), }; std::map> m(ar, ar+sizeof(ar)/sizeof(ar[0])); assert(m.size() == 7); assert(m[1] == 1.5); assert(m.size() == 7); m[1] = -1.5; assert(m[1] == -1.5); assert(m.size() == 7); assert(m[6] == 0); assert(m.size() == 8); m[6] = 6.5; assert(m[6] == 6.5); assert(m.size() == 8); } #endif return 0; }