]>
git.proxmox.com Git - ceph.git/blob - ceph/src/jaegertracing/opentelemetry-cpp/api/test/nostd/span_test.cc
1 // Copyright The OpenTelemetry Authors
2 // SPDX-License-Identifier: Apache-2.0
4 #include "opentelemetry/nostd/span.h"
12 #include <type_traits>
15 #include <gtest/gtest.h>
17 using opentelemetry::nostd::span
;
19 TEST(SpanTest
, DefaultConstruction
)
22 EXPECT_EQ(s1
.data(), nullptr);
23 EXPECT_EQ(s1
.size(), 0);
24 EXPECT_TRUE(s1
.empty());
27 EXPECT_EQ(s2
.data(), nullptr);
28 EXPECT_EQ(s2
.size(), 0);
29 EXPECT_TRUE(s2
.empty());
31 EXPECT_FALSE((std::is_default_constructible
<span
<int, 1>>::value
));
34 TEST(SpanTest
, Assignment
)
36 std::array
<int, 3> array1
= {1, 2, 3};
37 std::array
<int, 3> array2
= {1, 2, 3};
38 span
<int> s1
{array1
.data(), array1
.size()};
39 span
<int, 3> s2
{array1
.data(), array1
.size()};
43 EXPECT_EQ(s3
.data(), array1
.data());
44 EXPECT_EQ(s3
.size(), array1
.size());
46 span
<int, 3> s4
{array2
};
48 EXPECT_EQ(s4
.data(), array1
.data());
49 EXPECT_EQ(s4
.size(), array1
.size());
52 TEST(SpanTest
, PointerCountConstruction
)
54 std::array
<int, 3> array
= {1, 2, 3};
56 span
<int> s1
{array
.data(), array
.size()};
57 EXPECT_EQ(s1
.data(), array
.data());
58 EXPECT_EQ(s1
.size(), array
.size());
60 span
<int, 3> s2
{array
.data(), array
.size()};
61 EXPECT_EQ(s2
.data(), array
.data());
62 EXPECT_EQ(s2
.size(), array
.size());
64 #ifndef HAVE_CPP_STDLIB
65 /* This test is not supposed to fail with STL. Why is this invalid construct? */
66 EXPECT_DEATH((span
<int, 2>{array
.data(), array
.size()}), ".*");
70 TEST(SpanTest
, RangeConstruction
)
72 int array
[] = {1, 2, 3};
74 span
<int> s1
{std::begin(array
), std::end(array
)};
75 EXPECT_EQ(s1
.data(), array
);
76 EXPECT_EQ(s1
.size(), 3);
78 span
<int, 3> s2
{std::begin(array
), std::end(array
)};
79 EXPECT_EQ(s2
.data(), array
);
80 EXPECT_EQ(s2
.size(), 3);
82 #ifndef HAVE_CPP_STDLIB
83 /* This test is not supposed to fail with STL. Why is this invalid construct? */
84 EXPECT_DEATH((span
<int, 2>{std::begin(array
), std::end(array
)}), ".*");
88 TEST(SpanTest
, ArrayConstruction
)
90 int array1
[] = {1, 2, 3};
91 std::array
<int, 3> array2
= {1, 2, 3};
94 EXPECT_EQ(s1
.data(), array1
);
95 EXPECT_EQ(s1
.size(), 3);
98 EXPECT_EQ(s2
.data(), array2
.data());
99 EXPECT_EQ(s2
.size(), array2
.size());
101 span
<int, 3> s3
{array1
};
102 EXPECT_EQ(s3
.data(), array1
);
103 EXPECT_EQ(s3
.size(), 3);
105 span
<int, 3> s4
{array2
};
106 EXPECT_EQ(s4
.data(), array2
.data());
107 EXPECT_EQ(s4
.size(), array2
.size());
109 EXPECT_FALSE((std::is_constructible
<span
<int, 2>, int(&)[3]>::value
));
112 TEST(SpanTest
, ContainerConstruction
)
114 std::vector
<int> v
= {1, 2, 3};
117 EXPECT_EQ(s1
.data(), v
.data());
118 EXPECT_EQ(s1
.size(), v
.size());
120 span
<int, 3> s2
{v
.data(), 3};
122 EXPECT_EQ(s2
.data(), v
.data());
123 EXPECT_EQ(s2
.size(), v
.size());
125 #ifndef HAVE_CPP_STDLIB
126 /* This test is not supposed to fail with STL. Why is this invalid construct? */
127 EXPECT_DEATH((span
<int, 2>{v
.data(), 3}), ".*");
130 EXPECT_FALSE((std::is_constructible
<span
<int>, std::vector
<double>>::value
));
131 EXPECT_FALSE((std::is_constructible
<span
<int>, std::list
<int>>::value
));
134 TEST(SpanTest
, OtherSpanConstruction
)
136 std::array
<int, 3> array
= {1, 2, 3};
137 span
<int> s1
{array
.data(), array
.size()};
138 span
<int, 3> s2
{array
.data(), array
.size()};
141 EXPECT_EQ(s3
.data(), array
.data());
142 EXPECT_EQ(s3
.size(), array
.size());
145 EXPECT_EQ(s4
.data(), array
.data());
146 EXPECT_EQ(s4
.size(), array
.size());
148 span
<const int> s5
{s1
};
149 EXPECT_EQ(s5
.data(), array
.data());
150 EXPECT_EQ(s5
.size(), array
.size());
152 EXPECT_FALSE((std::is_constructible
<span
<int>, span
<const int>>::value
));
153 EXPECT_FALSE((std::is_constructible
<span
<int>, span
<double>>::value
));
156 EXPECT_EQ(s6
.data(), array
.data());
157 EXPECT_EQ(s6
.size(), array
.size());
159 span
<const int, 3> s7
{s2
};
160 EXPECT_EQ(s7
.data(), array
.data());
161 EXPECT_EQ(s7
.size(), array
.size());
163 EXPECT_FALSE((std::is_constructible
<span
<int, 3>, span
<int, 4>>::value
));
164 EXPECT_FALSE((std::is_constructible
<span
<int, 3>, span
<double, 3>>::value
));
167 TEST(SpanTest
, BracketOperator
)
169 std::array
<int, 2> array
= {1, 2};
171 span
<int> s1
{array
.data(), array
.size()};
175 span
<int, 2> s2
{array
.data(), array
.size()};
180 TEST(SpanTest
, Iteration
)
182 std::array
<int, 3> array
= {1, 2, 3};
184 span
<int> s1
{array
.data(), array
.size()};
185 EXPECT_EQ(std::distance(s1
.begin(), s1
.end()), array
.size());
186 EXPECT_TRUE(std::equal(s1
.begin(), s1
.end(), array
.begin()));
188 span
<int, 3> s2
{array
.data(), array
.size()};
189 EXPECT_EQ(std::distance(s2
.begin(), s2
.end()), array
.size());
190 EXPECT_TRUE(std::equal(s2
.begin(), s2
.end(), array
.begin()));