16 #include "tensorflow_serving/util/any_ptr.h"
21 #include <gtest/gtest.h>
22 #include "absl/base/attributes.h"
24 namespace tensorflow {
28 TEST(AnyPtrTest, SetAndGet) {
34 EXPECT_EQ(&
object, ptr.get<
int>());
35 EXPECT_EQ(
nullptr, ptr.get<
bool>());
39 EXPECT_EQ(
nullptr, ptr.get<
int>());
40 EXPECT_EQ(
nullptr, ptr.get<
bool>());
43 TEST(AnyPtrTest, ConstCorrect) {
47 EXPECT_EQ(
nullptr, ptr.get<
int>());
48 EXPECT_EQ(&
object, ptr.get<
const int>());
53 TEST(AnyPtrTest, BaseClass) {
59 int unused_base_var_ ABSL_ATTRIBUTE_UNUSED = 0;
62 class Child :
public Base {
67 int unused_child_var_ ABSL_ATTRIBUTE_UNUSED = 0;
77 EXPECT_EQ(
nullptr, ptr.get<Base>());
80 EXPECT_EQ(&c, ptr.get<Child>());
84 ptr =
static_cast<Base*
>(&c);
85 EXPECT_EQ(&c, ptr.get<Base>());
86 EXPECT_EQ(
nullptr, ptr.get<Child>());
90 ~Destructable() { *destroyed =
true; }
92 bool*
const destroyed;
95 TEST(UniqueAnyPtrTest, SetGetAndDestroy) {
96 bool destroyed =
false;
101 UniqueAnyPtr{std::unique_ptr<Destructable>{
new Destructable{&destroyed}}};
102 EXPECT_EQ(&destroyed, ptr.get<Destructable>()->destroyed);
103 EXPECT_EQ(
nullptr, ptr.get<
int>());
104 ASSERT_FALSE(destroyed);
108 EXPECT_TRUE(destroyed);
111 TEST(UniqueAnyPtrTest, MoveConstruction) {
112 UniqueAnyPtr ptr1 = UniqueAnyPtr(std::unique_ptr<int>(
new int(1)));
113 UniqueAnyPtr ptr2(std::move(ptr1));
115 ASSERT_EQ(1, *ptr2.get<
int>());