12561885fSEric Fiselier //===----------------------------------------------------------------------===// 22561885fSEric Fiselier // 357b08b09SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 457b08b09SChandler Carruth // See https://llvm.org/LICENSE.txt for license information. 557b08b09SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 62561885fSEric Fiselier // 72561885fSEric Fiselier //===----------------------------------------------------------------------===// 82561885fSEric Fiselier 92561885fSEric Fiselier // <memory> 102561885fSEric Fiselier 112561885fSEric Fiselier // unique_ptr 122561885fSEric Fiselier 132561885fSEric Fiselier // test release 142561885fSEric Fiselier 152561885fSEric Fiselier #include <memory> 162561885fSEric Fiselier #include <cassert> 172561885fSEric Fiselier 1847272722SEric Fiselier #include "test_macros.h" 192561885fSEric Fiselier #include "unique_ptr_test_helper.h" 202561885fSEric Fiselier 212561885fSEric Fiselier template <bool IsArray> test_basic()222561885fSEric Fiseliervoid test_basic() { 232561885fSEric Fiselier typedef typename std::conditional<IsArray, A[], A>::type VT; 242561885fSEric Fiselier const int expect_alive = IsArray ? 3 : 1; 2547272722SEric Fiselier #if TEST_STD_VER >= 11 2647272722SEric Fiselier { 2747272722SEric Fiselier using U = std::unique_ptr<VT>; 2847272722SEric Fiselier U u; ((void)u); 2947272722SEric Fiselier ASSERT_NOEXCEPT(u.release()); 3047272722SEric Fiselier } 3147272722SEric Fiselier #endif 322561885fSEric Fiselier { 332561885fSEric Fiselier std::unique_ptr<VT> p(newValue<VT>(expect_alive)); 342561885fSEric Fiselier assert(A::count == expect_alive); 352561885fSEric Fiselier A* ap = p.get(); 362561885fSEric Fiselier A* a = p.release(); 372561885fSEric Fiselier assert(A::count == expect_alive); 382561885fSEric Fiselier assert(p.get() == nullptr); 392561885fSEric Fiselier assert(ap == a); 402561885fSEric Fiselier assert(a != nullptr); 412561885fSEric Fiselier 422561885fSEric Fiselier if (IsArray) 432561885fSEric Fiselier delete[] a; 442561885fSEric Fiselier else 452561885fSEric Fiselier delete a; 462561885fSEric Fiselier 472561885fSEric Fiselier assert(A::count == 0); 482561885fSEric Fiselier } 492561885fSEric Fiselier assert(A::count == 0); 502561885fSEric Fiselier } 512561885fSEric Fiselier main(int,char **)52*2df59c50SJF Bastienint main(int, char**) { 532561885fSEric Fiselier test_basic</*IsArray*/ false>(); 542561885fSEric Fiselier test_basic<true>(); 55*2df59c50SJF Bastien 56*2df59c50SJF Bastien return 0; 572561885fSEric Fiselier } 58