Skip to content

Commit 3b33f65

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

2 files changed

Lines changed: 77 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: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
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 arr{ 10, 20, 30, 40 };
17+
const 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, OutOfRangeThrows)
26+
{
27+
std::array arr{ 1, 2, 3 };
28+
const utils::span<int> s(arr);
29+
30+
EXPECT_THROW(std::ignore = s.at(3), std::out_of_range);
31+
EXPECT_THROW(std::ignore = s.at(100), std::out_of_range);
32+
}
33+
34+
TEST(SpanAt, EmptySpanThrows)
35+
{
36+
const utils::span<int> s;
37+
EXPECT_THROW(std::ignore = s.at(0), std::out_of_range);
38+
}
39+
40+
TEST(SpanAt, ReturnsMutableReference)
41+
{
42+
std::array arr{ 1, 2 };
43+
const utils::span<int> s(arr);
44+
45+
s.at(1) = 42;
46+
EXPECT_EQ(arr[1], 42);
47+
}
48+
49+
TEST(SpanAt, ConstSpanReadsCorrectly)
50+
{
51+
std::array arr{ 5, 6 };
52+
const utils::span<const int> s(arr);
53+
54+
EXPECT_EQ(s.at(0), 5);
55+
EXPECT_EQ(s.at(1), 6);
56+
}
57+
58+
TEST(SpanAt, BoundaryIndex)
59+
{
60+
std::array arr = { 99 };
61+
const utils::span<int> s(arr);
62+
63+
EXPECT_EQ(s.at(0), 99);
64+
EXPECT_THROW(std::ignore = s.at(1), std::out_of_range);
65+
}
66+
67+
TEST(SpanAt, SubspanAt)
68+
{
69+
std::array raw{ 0, 1, 2, 3, 4 };
70+
auto s = utils::span<int>(raw).subspan(1, 3);
71+
72+
EXPECT_EQ(s.at(0), 1);
73+
EXPECT_EQ(s.at(2), 3);
74+
EXPECT_THROW(std::ignore = s.at(3), std::out_of_range);
75+
}

0 commit comments

Comments
 (0)