Skip to content

Commit 34f9502

Browse files
committed
test: add tests for P3394R4
Signed-off-by: Yuming He <ComixHe1895@outlook.com>
1 parent 9c54edd commit 34f9502

2 files changed

Lines changed: 104 additions & 1 deletion

File tree

tests/ll-box-ut/CMakeLists.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
include(GoogleTest)
22

33
set(linyaps-box_UNIT_TESTS ll-box-ut)
4-
set(linyaps-box_UNIT_TESTS_SOURCE ./src/test.cpp ./src/semver_test.cpp)
4+
set(linyaps-box_UNIT_TESTS_SOURCE ./src/test.cpp ./src/semver_test.cpp
5+
./src/span_test.cpp)
56
set(linyaps-box_UNIT_TESTS_LINK_LIBRARIES PRIVATE "${linyaps-box_LIBRARY}")
67
set(linyaps-box_UNIT_TESTS_SOURCE_INCLUDE_DIRS
78
PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/src")

tests/ll-box-ut/src/span_test.cpp

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
// SPDX-FileCopyrightText: 2026 UnionTech Software Technology Co., Ltd.
2+
//
3+
// SPDX-License-Identifier: LGPL-3.0-or-later
4+
5+
#include <gtest/gtest.h>
6+
7+
#include <linyaps_box/utils/span.h>
8+
9+
#include <array>
10+
#include <vector>
11+
12+
namespace utils = linyaps_box::utils;
13+
14+
TEST(SpanAt, ValidIndexDynamicExtent)
15+
{
16+
std::array<int, 4> arr = { 10, 20, 30, 40 };
17+
utils::span<int> s(arr);
18+
19+
EXPECT_EQ(s.at(0), 10);
20+
EXPECT_EQ(s.at(1), 20);
21+
EXPECT_EQ(s.at(2), 30);
22+
EXPECT_EQ(s.at(3), 40);
23+
}
24+
25+
TEST(SpanAt, ValidIndexStaticExtent)
26+
{
27+
std::array<int, 4> arr = { 10, 20, 30, 40 };
28+
utils::span<int, 4> s(arr);
29+
30+
EXPECT_EQ(s.at(0), 10);
31+
EXPECT_EQ(s.at(3), 40);
32+
}
33+
34+
TEST(SpanAt, OutOfRangeThrows)
35+
{
36+
std::array<int, 3> arr = { 1, 2, 3 };
37+
utils::span<int> s(arr);
38+
39+
EXPECT_THROW(s.at(3), std::out_of_range);
40+
EXPECT_THROW(s.at(100), std::out_of_range);
41+
}
42+
43+
TEST(SpanAt, OutOfRangeStaticExtentThrows)
44+
{
45+
std::array<int, 3> arr = { 1, 2, 3 };
46+
utils::span<int, 3> s(arr);
47+
48+
EXPECT_THROW(s.at(3), std::out_of_range);
49+
}
50+
51+
TEST(SpanAt, EmptySpanThrows)
52+
{
53+
utils::span<int> s;
54+
EXPECT_THROW(s.at(0), std::out_of_range);
55+
}
56+
57+
TEST(SpanAt, ReturnsMutableReference)
58+
{
59+
std::array<int, 2> arr = { 1, 2 };
60+
utils::span<int> s(arr);
61+
62+
s.at(1) = 42;
63+
EXPECT_EQ(arr[1], 42);
64+
}
65+
66+
TEST(SpanAt, ConstSpanReadsCorrectly)
67+
{
68+
std::array<int, 2> arr = { 5, 6 };
69+
const utils::span<const int> s(arr);
70+
71+
EXPECT_EQ(s.at(0), 5);
72+
EXPECT_EQ(s.at(1), 6);
73+
}
74+
75+
TEST(SpanAt, BoundaryIndex)
76+
{
77+
std::array<int, 1> arr = { 99 };
78+
utils::span<int> s(arr);
79+
80+
EXPECT_EQ(s.at(0), 99);
81+
EXPECT_THROW(s.at(1), std::out_of_range);
82+
}
83+
84+
TEST(SpanAt, SubspanAt)
85+
{
86+
int raw[] = { 0, 1, 2, 3, 4 };
87+
auto s = utils::span<int>(raw).subspan(1, 3);
88+
89+
EXPECT_EQ(s.at(0), 1);
90+
EXPECT_EQ(s.at(2), 3);
91+
EXPECT_THROW(s.at(3), std::out_of_range);
92+
}
93+
94+
TEST(SpanAt, VectorCompatible)
95+
{
96+
std::vector<int> v = { 100, 200, 300 };
97+
utils::span<int> s(v);
98+
99+
EXPECT_EQ(s.at(0), 100);
100+
EXPECT_EQ(s.at(2), 300);
101+
EXPECT_THROW(s.at(3), std::out_of_range);
102+
}

0 commit comments

Comments
 (0)