//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is dual licensed under the MIT and the University of Illinois Open // Source Licenses. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // class map // mapped_type& operator[](const key_type& k); #include #include #include "test_macros.h" #include "count_new.hpp" #include "min_allocator.h" #include "private_constructor.hpp" #if TEST_STD_VER >= 11 #include "container_test_types.h" #endif int main() { { 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; using ValueTp = Container::value_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 }