Skip to content

Commit fd39cfa

Browse files
Abseil Teamcopybara-github
authored andcommitted
Add tests for macro nullability annotations analogous to existing tests for type alias annotations.
PiperOrigin-RevId: 740372581 Change-Id: I37e7702cb5207b72b413d3e58d70e773b326c57e
1 parent 3b1bb73 commit fd39cfa

File tree

1 file changed

+72
-1
lines changed

1 file changed

+72
-1
lines changed

absl/base/nullability_test.cc

Lines changed: 72 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,85 @@
1616

1717
#include <cassert>
1818
#include <memory>
19+
#include <type_traits>
1920
#include <utility>
2021

2122
#include "gtest/gtest.h"
22-
#include "absl/base/attributes.h"
2323

2424
namespace {
25+
namespace macro_annotations {
26+
void funcWithNonnullArg(int* absl_nonnull /*arg*/) {}
27+
template <typename T>
28+
void funcWithDeducedNonnullArg(T* absl_nonnull /*arg*/) {}
29+
30+
TEST(NonnullTest, NonnullArgument) {
31+
int var = 0;
32+
funcWithNonnullArg(&var);
33+
funcWithDeducedNonnullArg(&var);
34+
}
35+
36+
int* absl_nonnull funcWithNonnullReturn() {
37+
static int var = 0;
38+
return &var;
39+
}
40+
41+
TEST(NonnullTest, NonnullReturn) {
42+
auto var = funcWithNonnullReturn();
43+
(void)var;
44+
}
45+
46+
TEST(PassThroughTest, PassesThroughRawPointerToInt) {
47+
EXPECT_TRUE((std::is_same<int* absl_nonnull, int*>::value));
48+
EXPECT_TRUE((std::is_same<int* absl_nullable, int*>::value));
49+
EXPECT_TRUE((std::is_same<int* absl_nullability_unknown, int*>::value));
50+
}
51+
52+
TEST(PassThroughTest, PassesThroughRawPointerToVoid) {
53+
EXPECT_TRUE((std::is_same<void* absl_nonnull, void*>::value));
54+
EXPECT_TRUE((std::is_same<void* absl_nullable, void*>::value));
55+
EXPECT_TRUE((std::is_same<void* absl_nullability_unknown, void*>::value));
56+
}
57+
58+
TEST(PassThroughTest, PassesThroughUniquePointerToInt) {
59+
using T = std::unique_ptr<int>;
60+
EXPECT_TRUE((std::is_same<absl_nonnull T, T>::value));
61+
EXPECT_TRUE((std::is_same<absl_nullable T, T>::value));
62+
EXPECT_TRUE((std::is_same<absl_nullability_unknown T, T>::value));
63+
}
64+
65+
TEST(PassThroughTest, PassesThroughSharedPointerToInt) {
66+
using T = std::shared_ptr<int>;
67+
EXPECT_TRUE((std::is_same<absl_nonnull T, T>::value));
68+
EXPECT_TRUE((std::is_same<absl_nullable T, T>::value));
69+
EXPECT_TRUE((std::is_same<absl_nullability_unknown T, T>::value));
70+
}
71+
72+
TEST(PassThroughTest, PassesThroughSharedPointerToVoid) {
73+
using T = std::shared_ptr<void>;
74+
EXPECT_TRUE((std::is_same<absl_nonnull T, T>::value));
75+
EXPECT_TRUE((std::is_same<absl_nullable T, T>::value));
76+
EXPECT_TRUE((std::is_same<absl_nullability_unknown T, T>::value));
77+
}
78+
79+
TEST(PassThroughTest, PassesThroughPointerToMemberObject) {
80+
using T = decltype(&std::pair<int, int>::first);
81+
EXPECT_TRUE((std::is_same<absl_nonnull T, T>::value));
82+
EXPECT_TRUE((std::is_same<absl_nullable T, T>::value));
83+
EXPECT_TRUE((std::is_same<absl_nullability_unknown T, T>::value));
84+
}
85+
86+
TEST(PassThroughTest, PassesThroughPointerToMemberFunction) {
87+
using T = decltype(&std::unique_ptr<int>::reset);
88+
EXPECT_TRUE((std::is_same<absl_nonnull T, T>::value));
89+
EXPECT_TRUE((std::is_same<absl_nullable T, T>::value));
90+
EXPECT_TRUE((std::is_same<absl_nullability_unknown T, T>::value));
91+
}
92+
} // namespace macro_annotations
93+
2594
using ::absl::Nonnull;
2695
using ::absl::NullabilityUnknown;
2796
using ::absl::Nullable;
97+
namespace type_alias_annotations {
2898

2999
void funcWithNonnullArg(Nonnull<int*> /*arg*/) {}
30100
template <typename T>
@@ -93,6 +163,7 @@ TEST(PassThroughTest, PassesThroughPointerToMemberFunction) {
93163
EXPECT_TRUE((std::is_same<NullabilityUnknown<T>, T>::value));
94164
}
95165

166+
} // namespace type_alias_annotations
96167
} // namespace
97168

98169
// Nullable ADL lookup test

0 commit comments

Comments
 (0)