Skip to content

Commit b76c6c8

Browse files
Fea, Span添加Subspan、IndexOf、IndexOfAny、LastIndexOf、LastIndexOfAny、TrimStart、TrimEnd、Trim、SplitAndTakeFirst、Contains、ContainsAny、StartsWith、EndsWith
1 parent 2d23daa commit b76c6c8

File tree

4 files changed

+628
-19
lines changed

4 files changed

+628
-19
lines changed

UnitTest/SpanUnitTest.cpp

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
#include "CppUnitTest.h"
2+
3+
#include <atlstr.h>
4+
#include <Windows.h>
5+
#include <tchar.h>
6+
#include <string>
7+
#include <atltypes.h>
8+
9+
#include <YY/Base/Containers/Span.h>
10+
11+
using namespace Microsoft::VisualStudio::CppUnitTestFramework;
12+
using namespace YY;
13+
14+
namespace Microsoft::VisualStudio::CppUnitTestFramework
15+
{
16+
template<>
17+
inline std::wstring ToString<YY::Span<const YY::uchar_t>>(const YY::Span<const YY::uchar_t>& _oValue)
18+
{
19+
std::wstring _szResult;
20+
_szResult += L'{';
21+
22+
_szResult.append(_oValue.GetData(), _oValue.GetLength());
23+
24+
_szResult += L'}';
25+
26+
return _szResult;
27+
}
28+
}
29+
30+
namespace UnitTest
31+
{
32+
TEST_CLASS(Span)
33+
{
34+
public:
35+
36+
TEST_METHOD(IndexOf)
37+
{
38+
const YY::Span<const YY::uchar_t> _sTest(_S("0123456789"), 10);
39+
{
40+
Assert::AreEqual(_sTest.IndexOf(YY::uchar_t('0')), size_t(0));
41+
Assert::AreEqual(_sTest.IndexOf(YY::uchar_t('7')), size_t(7));
42+
Assert::AreEqual(_sTest.IndexOf(YY::uchar_t('9')), size_t(9));
43+
Assert::AreEqual(_sTest.IndexOf(YY::uchar_t('a')), YY::kuInvalidIndex);
44+
45+
Assert::AreEqual(_sTest.IndexOf(YY::uchar_t('0'), 1), YY::kuInvalidIndex);
46+
Assert::AreEqual(_sTest.IndexOf(YY::uchar_t('7'), 1), size_t(7));
47+
Assert::AreEqual(_sTest.IndexOf(YY::uchar_t('9'), 1), size_t(9));
48+
Assert::AreEqual(_sTest.IndexOf(YY::uchar_t('a'), 1), YY::kuInvalidIndex);
49+
50+
Assert::AreEqual(_sTest.IndexOf(YY::uchar_t('0'), 1, 7), YY::kuInvalidIndex);
51+
Assert::AreEqual(_sTest.IndexOf(YY::uchar_t('7'), 1, 6), YY::kuInvalidIndex);
52+
Assert::AreEqual(_sTest.IndexOf(YY::uchar_t('7'), 1, 7), size_t(7));
53+
Assert::AreEqual(_sTest.IndexOf(YY::uchar_t('9'), 1, 8), YY::kuInvalidIndex);
54+
Assert::AreEqual(_sTest.IndexOf(YY::uchar_t('9'), 1, 9), size_t(9));
55+
Assert::AreEqual(_sTest.IndexOf(YY::uchar_t('9'), 1, 10), size_t(9));
56+
Assert::AreEqual(_sTest.IndexOf(YY::uchar_t('a'), 1), YY::kuInvalidIndex);
57+
58+
}
59+
60+
{
61+
Assert::AreEqual(_sTest.IndexOf(YY::Span<const YY::uchar_t>(_S("012"), 3)), size_t(0));
62+
Assert::AreEqual(_sTest.IndexOf(YY::Span<const YY::uchar_t>(_S("123"), 3)), size_t(1));
63+
Assert::AreEqual(_sTest.IndexOf(YY::Span<const YY::uchar_t>(_S("789"), 3)), size_t(7));
64+
Assert::AreEqual(_sTest.IndexOf(YY::Span<const YY::uchar_t>(_S("890"), 3)), YY::kuInvalidIndex);
65+
66+
67+
Assert::AreEqual(_sTest.IndexOf(YY::Span<const YY::uchar_t>(_S("12"), 2), 0, 2), YY::kuInvalidIndex);
68+
Assert::AreEqual(_sTest.IndexOf(YY::Span<const YY::uchar_t>(_S("12"), 2), 0, 3), size_t(1));
69+
Assert::AreEqual(_sTest.IndexOf(YY::Span<const YY::uchar_t>(_S("12"), 2), 1, 3), size_t(1));
70+
}
71+
}
72+
73+
TEST_METHOD(IndexOfAny)
74+
{
75+
YY::Span<const YY::uchar_t> _sTest(_S("0123456789"), 10);
76+
77+
{
78+
Assert::AreEqual(_sTest.IndexOfAny(YY::Span<const YY::uchar_t>(_S("0123456789"), 10)), size_t(0));
79+
Assert::AreEqual(_sTest.IndexOfAny(YY::Span<const YY::uchar_t>(_S("123456789"), 9)), size_t(1));
80+
Assert::AreEqual(_sTest.IndexOfAny(YY::Span<const YY::uchar_t>(_S("9"), 1)), size_t(9));
81+
Assert::AreEqual(_sTest.IndexOfAny(YY::Span<const YY::uchar_t>(_S("abcd"), 4)), YY::kuInvalidIndex);
82+
}
83+
}
84+
85+
TEST_METHOD(SplitAndTakeFirst)
86+
{
87+
YY::Span<const YY::uchar_t> _szTemp(_S("01|34|6789"), 10);
88+
89+
size_t _uNextIndex = 0;
90+
Assert::AreEqual(_szTemp.SplitAndTakeFirst(YY::uchar_t('|'), _uNextIndex, &_uNextIndex), YY::Span<const YY::uchar_t>(_S("01"), 2));
91+
Assert::AreEqual(_uNextIndex, size_t(3));
92+
93+
Assert::AreEqual(_szTemp.SplitAndTakeFirst(YY::uchar_t('|'), _uNextIndex, &_uNextIndex), YY::Span<const YY::uchar_t>(_S("34"), 2));
94+
Assert::AreEqual(_uNextIndex, size_t(6));
95+
96+
Assert::AreEqual(_szTemp.SplitAndTakeFirst(YY::uchar_t('|'), _uNextIndex, &_uNextIndex), YY::Span<const YY::uchar_t>(_S("6789"), 4));
97+
Assert::AreEqual(_uNextIndex, size_t(10));
98+
}
99+
};
100+
}

UnitTest/UnitTest.vcxproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,7 @@
189189
<ClCompile Include="BitMapUnitTest.cpp" />
190190
<ClCompile Include="DynamicArrayUnitTest.cpp" />
191191
<ClCompile Include="ObserverPtrUnitTest.cpp" />
192+
<ClCompile Include="SpanUnitTest.cpp" />
192193
<ClCompile Include="StringUnitTest.cpp" />
193194
<ClCompile Include="TaskRunnerUnitTest.cpp" />
194195
</ItemGroup>

UnitTest/UnitTest.vcxproj.filters

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -141,12 +141,18 @@
141141
<ClCompile Include="BindUnitTest.cpp">
142142
<Filter>单元测试</Filter>
143143
</ClCompile>
144+
<ClCompile Include="..\src\YY\Base\Time\DataTime.cpp">
145+
<Filter>源文件</Filter>
146+
</ClCompile>
147+
<ClCompile Include="SpanUnitTest.cpp">
148+
<Filter>单元测试</Filter>
149+
</ClCompile>
144150
</ItemGroup>
145151
<ItemGroup>
146152
<ClInclude Include="..\include\YY\Base\Containers\Array.h">
147153
<Filter>头文件\YY\Base\Containers</Filter>
148154
</ClInclude>
149-
<ClInclude Include="..\include\YY\Base\Containers\ArrayView.h">
155+
<ClInclude Include="..\include\YY\Base\Containers\Span.h">
150156
<Filter>头文件\YY\Base\Containers</Filter>
151157
</ClInclude>
152158
<ClInclude Include="..\include\YY\Base\Containers\BitMap.h">
@@ -311,8 +317,8 @@
311317
<ClInclude Include="..\include\YY\Base\Functional\Bind.h">
312318
<Filter>头文件\YY\Base\Functional</Filter>
313319
</ClInclude>
314-
<ClInclude Include="..\include\YY\Base\Time\UtcTime.h">
315-
<Filter>头文件\YY\Base\Time</Filter>
320+
<ClInclude Include="..\include\YY\Base\Time\DataTime.h">
321+
<Filter>头文件</Filter>
316322
</ClInclude>
317323
</ItemGroup>
318324
<ItemGroup>

0 commit comments

Comments
 (0)