1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
// SPDX-FileCopyrightText: Copyright Contributors to the Kokkos project
#include <impl/Kokkos_HostSharedPtr.hpp>
#include <gtest/gtest.h>
using Kokkos::Impl::HostSharedPtr;
TEST(TEST_CATEGORY, host_shared_ptr_use_count) {
using T = int;
{
HostSharedPtr<T> p1;
EXPECT_EQ(p1.use_count(), 0);
}
{
HostSharedPtr<T> p1(nullptr);
EXPECT_EQ(p1.use_count(), 0);
}
{
HostSharedPtr<T> p1(new T());
EXPECT_EQ(p1.use_count(), 1);
}
{
HostSharedPtr<T> p1(new T(), [](T* p) { delete p; });
EXPECT_EQ(p1.use_count(), 1);
}
{
T i;
HostSharedPtr<T> p1(&i, [](T*) {});
EXPECT_EQ(p1.use_count(), 1);
}
{
HostSharedPtr<T> p1(new T());
HostSharedPtr<T> p2(p1); // copy construction
EXPECT_EQ(p1.use_count(), 2);
EXPECT_EQ(p2.use_count(), 2);
}
{
HostSharedPtr<T> p1(new T());
HostSharedPtr<T> p2(std::move(p1)); // move construction
EXPECT_EQ(p2.use_count(), 1);
}
{
HostSharedPtr<T> p1(new T());
HostSharedPtr<T> p2;
p2 = p1; // copy assignment
EXPECT_EQ(p1.use_count(), 2);
EXPECT_EQ(p2.use_count(), 2);
}
{
HostSharedPtr<T> p1(new T());
HostSharedPtr<T> p2;
p2 = std::move(p1); // move assignment
EXPECT_EQ(p2.use_count(), 1);
}
}
TEST(TEST_CATEGORY, host_shared_ptr_get) {
using T = int;
{
HostSharedPtr<T> p1;
EXPECT_EQ(p1.get(), nullptr);
}
{
HostSharedPtr<T> p1(nullptr);
EXPECT_EQ(p1.get(), nullptr);
}
{
T* p_i = new T();
HostSharedPtr<T> p1(p_i);
EXPECT_EQ(p1.get(), p_i);
}
{
T* p_i = new T();
HostSharedPtr<T> p1(p_i, [](T* p) { delete p; });
EXPECT_EQ(p1.get(), p_i);
}
{
T i;
HostSharedPtr<T> p1(&i, [](T*) {});
EXPECT_EQ(p1.get(), &i);
}
{
T i;
HostSharedPtr<T> p1(&i, [](T*) {});
HostSharedPtr<T> p2(p1); // copy construction
EXPECT_EQ(p1.get(), &i);
EXPECT_EQ(p1.get(), &i);
}
{
T i;
HostSharedPtr<T> p1(&i, [](T*) {});
HostSharedPtr<T> p2(std::move(p1)); // move construction
EXPECT_EQ(p1.get(), nullptr); // NOLINT(bugprone-use-after-move)
EXPECT_EQ(p2.get(), &i);
}
{
T i;
HostSharedPtr<T> p1(&i, [](T*) {});
HostSharedPtr<T> p2;
p2 = p1; // copy assignment
EXPECT_EQ(p1.get(), &i);
EXPECT_EQ(p2.get(), &i);
}
{
T i;
HostSharedPtr<T> p1(&i, [](T*) {});
HostSharedPtr<T> p2;
p2 = std::move(p1); // move assignment
EXPECT_EQ(p1.get(), nullptr); // NOLINT(bugprone-use-after-move)
EXPECT_EQ(p2.get(), &i);
}
}
|