Skip to content

Commit 72c3a40

Browse files
committed
测试
1 parent 840a9b7 commit 72c3a40

File tree

6 files changed

+220
-9
lines changed

6 files changed

+220
-9
lines changed

design-linked-list/design-linked-list.sln

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ Global
1111
Debug|x86 = Debug|x86
1212
Release|x64 = Release|x64
1313
Release|x86 = Release|x86
14+
test|x64 = test|x64
15+
test|x86 = test|x86
1416
EndGlobalSection
1517
GlobalSection(ProjectConfigurationPlatforms) = postSolution
1618
{1607ABC6-AEF2-4558-8B08-CE8C4F28D292}.Debug|x64.ActiveCfg = Debug|x64
@@ -21,6 +23,10 @@ Global
2123
{1607ABC6-AEF2-4558-8B08-CE8C4F28D292}.Release|x64.Build.0 = Release|x64
2224
{1607ABC6-AEF2-4558-8B08-CE8C4F28D292}.Release|x86.ActiveCfg = Release|Win32
2325
{1607ABC6-AEF2-4558-8B08-CE8C4F28D292}.Release|x86.Build.0 = Release|Win32
26+
{1607ABC6-AEF2-4558-8B08-CE8C4F28D292}.test|x64.ActiveCfg = test|x64
27+
{1607ABC6-AEF2-4558-8B08-CE8C4F28D292}.test|x64.Build.0 = test|x64
28+
{1607ABC6-AEF2-4558-8B08-CE8C4F28D292}.test|x86.ActiveCfg = test|Win32
29+
{1607ABC6-AEF2-4558-8B08-CE8C4F28D292}.test|x86.Build.0 = test|Win32
2430
EndGlobalSection
2531
GlobalSection(SolutionProperties) = preSolution
2632
HideSolutionNode = FALSE

design-linked-list/design-linked-list.vcxproj

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,18 @@
1717
<Configuration>Release</Configuration>
1818
<Platform>x64</Platform>
1919
</ProjectConfiguration>
20+
<ProjectConfiguration Include="test|Win32">
21+
<Configuration>test</Configuration>
22+
<Platform>Win32</Platform>
23+
</ProjectConfiguration>
24+
<ProjectConfiguration Include="test|x64">
25+
<Configuration>test</Configuration>
26+
<Platform>x64</Platform>
27+
</ProjectConfiguration>
2028
</ItemGroup>
2129
<ItemGroup>
2230
<ClCompile Include="index.ixx" />
31+
<ClCompile Include="test.cpp" />
2332
</ItemGroup>
2433
<PropertyGroup Label="Globals">
2534
<VCProjectVersion>16.0</VCProjectVersion>
@@ -42,6 +51,13 @@
4251
<WholeProgramOptimization>true</WholeProgramOptimization>
4352
<CharacterSet>Unicode</CharacterSet>
4453
</PropertyGroup>
54+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='test|Win32'" Label="Configuration">
55+
<ConfigurationType>Application</ConfigurationType>
56+
<UseDebugLibraries>false</UseDebugLibraries>
57+
<PlatformToolset>v143</PlatformToolset>
58+
<WholeProgramOptimization>true</WholeProgramOptimization>
59+
<CharacterSet>Unicode</CharacterSet>
60+
</PropertyGroup>
4561
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
4662
<ConfigurationType>Application</ConfigurationType>
4763
<UseDebugLibraries>true</UseDebugLibraries>
@@ -55,6 +71,13 @@
5571
<WholeProgramOptimization>true</WholeProgramOptimization>
5672
<CharacterSet>Unicode</CharacterSet>
5773
</PropertyGroup>
74+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='test|x64'" Label="Configuration">
75+
<ConfigurationType>Application</ConfigurationType>
76+
<UseDebugLibraries>false</UseDebugLibraries>
77+
<PlatformToolset>v143</PlatformToolset>
78+
<WholeProgramOptimization>true</WholeProgramOptimization>
79+
<CharacterSet>Unicode</CharacterSet>
80+
</PropertyGroup>
5881
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
5982
<ImportGroup Label="ExtensionSettings">
6083
</ImportGroup>
@@ -66,12 +89,18 @@
6689
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
6790
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
6891
</ImportGroup>
92+
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='test|Win32'" Label="PropertySheets">
93+
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
94+
</ImportGroup>
6995
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
7096
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
7197
</ImportGroup>
7298
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
7399
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
74100
</ImportGroup>
101+
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='test|x64'" Label="PropertySheets">
102+
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
103+
</ImportGroup>
75104
<PropertyGroup Label="UserMacros" />
76105
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
77106
<ClCompile>
@@ -101,6 +130,22 @@
101130
<GenerateDebugInformation>true</GenerateDebugInformation>
102131
</Link>
103132
</ItemDefinitionGroup>
133+
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='test|Win32'">
134+
<ClCompile>
135+
<WarningLevel>Level3</WarningLevel>
136+
<FunctionLevelLinking>true</FunctionLevelLinking>
137+
<IntrinsicFunctions>true</IntrinsicFunctions>
138+
<SDLCheck>true</SDLCheck>
139+
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
140+
<ConformanceMode>true</ConformanceMode>
141+
</ClCompile>
142+
<Link>
143+
<SubSystem>Console</SubSystem>
144+
<EnableCOMDATFolding>true</EnableCOMDATFolding>
145+
<OptimizeReferences>true</OptimizeReferences>
146+
<GenerateDebugInformation>true</GenerateDebugInformation>
147+
</Link>
148+
</ItemDefinitionGroup>
104149
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
105150
<ClCompile>
106151
<WarningLevel>Level3</WarningLevel>
@@ -131,6 +176,24 @@
131176
<GenerateDebugInformation>true</GenerateDebugInformation>
132177
</Link>
133178
</ItemDefinitionGroup>
179+
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='test|x64'">
180+
<ClCompile>
181+
<WarningLevel>Level3</WarningLevel>
182+
<FunctionLevelLinking>true</FunctionLevelLinking>
183+
<IntrinsicFunctions>true</IntrinsicFunctions>
184+
<SDLCheck>true</SDLCheck>
185+
<PreprocessorDefinitions>NDEBUG;_CONSOLE;__TEST__;%(PreprocessorDefinitions)</PreprocessorDefinitions>
186+
<ConformanceMode>true</ConformanceMode>
187+
<AdditionalIncludeDirectories>C:\Users\Administrator\Documents\vcpkg-master\installed\x64-windows-static\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
188+
<LanguageStandard>stdcpp20</LanguageStandard>
189+
</ClCompile>
190+
<Link>
191+
<SubSystem>Console</SubSystem>
192+
<EnableCOMDATFolding>true</EnableCOMDATFolding>
193+
<OptimizeReferences>true</OptimizeReferences>
194+
<GenerateDebugInformation>true</GenerateDebugInformation>
195+
</Link>
196+
</ItemDefinitionGroup>
134197
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
135198
<ImportGroup Label="ExtensionTargets">
136199
</ImportGroup>

design-linked-list/design-linked-list.vcxproj.filters

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,8 @@
1818
<ClCompile Include="index.ixx">
1919
<Filter>源文件</Filter>
2020
</ClCompile>
21+
<ClCompile Include="test.cpp">
22+
<Filter>源文件</Filter>
23+
</ClCompile>
2124
</ItemGroup>
2225
</Project>

design-linked-list/index.ixx

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,49 @@
11
module;
22

33
#include <algorithm>
4-
4+
#ifdef __TEST__
5+
#include <eventpp/callbacklist.h>
6+
#endif
57
export module leetcode_test.design_linked_list.MyLinkedList;
68
using std::max;
79

810
namespace leetcode_test::design_linked_list {
9-
10-
struct DLinkListNode {
11+
export struct DLinkListNode {
1112
int val;
1213
DLinkListNode *prev, *next;
1314
DLinkListNode(int _val)
1415
: val(_val)
1516
, prev(nullptr)
1617
, next(nullptr)
1718
{
19+
#ifdef __TEST__
20+
CallbackNew(this);
21+
#endif
22+
}
23+
~DLinkListNode()
24+
25+
{
26+
#ifdef __TEST__
27+
CallbackDelete(this);
28+
#endif
1829
}
30+
#ifdef __TEST__
31+
static eventpp::CallbackList<void(DLinkListNode*)> CallbackNew;
32+
static eventpp::CallbackList<void(DLinkListNode*)> CallbackDelete;
33+
#endif
1934
};
35+
#ifdef __TEST__
36+
eventpp::CallbackList<void(DLinkListNode*)> DLinkListNode::CallbackDelete {};
37+
eventpp::CallbackList<void(DLinkListNode*)> DLinkListNode::CallbackNew {};
38+
#endif
2039
export class MyLinkedList {
2140
public:
2241
~MyLinkedList()
2342
{
24-
DLinkListNode* dLinkListNode = head;
25-
while (dLinkListNode) {
26-
DLinkListNode* cur = dLinkListNode;
27-
dLinkListNode = dLinkListNode->next;
43+
DLinkListNode* node = head;
44+
while (node) {
45+
DLinkListNode* cur = node;
46+
node = node->next;
2847
delete cur;
2948
}
3049
head = nullptr;
@@ -123,4 +142,4 @@ private:
123142
DLinkListNode* head;
124143
DLinkListNode* tail;
125144
};
126-
} // namespace leetcode_test::design_linked_list
145+
} // namespace leetcode_test::design_linked_list

design-linked-list/test.cpp

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
2+
#include <gtest/gtest.h>
3+
#include <iterator>
4+
#include <unordered_set>
5+
#include <vector>
6+
#ifdef __TEST__
7+
#include <eventpp/callbacklist.h>
8+
#endif
9+
#include <ranges>
10+
import leetcode_test.design_linked_list.MyLinkedList;
11+
12+
using namespace leetcode_test::design_linked_list;
13+
using namespace std;
14+
using std::vector;
15+
16+
#ifdef __TEST__
17+
struct ListNodeInspector
18+
{
19+
unordered_set<DLinkListNode *> nodes;
20+
eventpp::CallbackList<void(DLinkListNode *)>::Handle handleNew;
21+
eventpp::CallbackList<void(DLinkListNode *)>::Handle handleDelete;
22+
ListNodeInspector()
23+
{
24+
auto handleNew = DLinkListNode::CallbackNew.append([this](auto *node) {
25+
std::cout << "DLinkListNode New:" << node << std::endl;
26+
nodes.insert(node);
27+
});
28+
this->handleNew = handleNew;
29+
auto handleDelete = DLinkListNode::CallbackDelete.append([this](auto *node) {
30+
std::cout << "DLinkListNode Delete:" << node << std::endl;
31+
32+
nodes.erase(node);
33+
});
34+
this->handleDelete = handleDelete;
35+
}
36+
~ListNodeInspector()
37+
{
38+
DLinkListNode::CallbackNew.remove(handleNew);
39+
DLinkListNode::CallbackDelete.remove(handleDelete);
40+
}
41+
};
42+
#endif
43+
TEST(design_linked_list, test1)
44+
{
45+
#ifdef __TEST__
46+
ListNodeInspector inspector;
47+
#endif
48+
49+
50+
MyLinkedList *myLinkedList1 = new MyLinkedList();
51+
myLinkedList1->addAtHead(1);
52+
myLinkedList1->addAtTail(3);
53+
myLinkedList1->addAtIndex(1, 2); // 链表变为 1->2->3
54+
ASSERT_EQ(2, myLinkedList1->get(1));
55+
myLinkedList1->deleteAtIndex(1); // 现在,链表 ->3
56+
ASSERT_EQ(3, myLinkedList1->get(1)); // 返回 3
57+
//haha
58+
delete myLinkedList1;
59+
60+
61+
62+
63+
//haha
64+
65+
66+
#ifdef __TEST__
67+
68+
69+
ASSERT_EQ
70+
71+
(size_t(0), inspector.nodes.size());
72+
#endif
73+
}
74+
TEST(design_linked_list, test2)
75+
{
76+
#ifdef __TEST__
77+
ListNodeInspector inspector;
78+
#endif
79+
80+
81+
MyLinkedList *myLinkedList1 = new MyLinkedList();
82+
myLinkedList1->addAtHead(1);
83+
myLinkedList1->addAtTail(3);
84+
myLinkedList1->addAtIndex(1, 2); // 链表变为 1->2->3
85+
ASSERT_EQ(1, myLinkedList1->get(0));
86+
ASSERT_EQ(2, myLinkedList1->get(1));
87+
//myLinkedList1->deleteAtIndex(1); // 现在,链表 ->3
88+
ASSERT_EQ(3, myLinkedList1->get(2)); // 返回 3
89+
//haha
90+
delete myLinkedList1;
91+
92+
93+
94+
95+
//haha
96+
97+
#ifdef __TEST__
98+
ASSERT_EQ
99+
100+
(size_t(0), inspector.nodes.size());
101+
#endif
102+
}
103+
104+
int main(int argc, char** argv)
105+
{
106+
testing::Init GogleTest(&argc, argv);
107+
return RUN_ALL_TESTS();
108+
}

design-linked-list/xmake.lua

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,20 @@
1+
if is_mode("test") then add_requires("vcpkg::eventpp") end
12
add_rules("mode.debug", "mode.release")
23
set_languages('cxx20')
34
target("design-linked-list")
45
set_kind("static")
5-
add_files("index.ixx")
6+
67

78
add_files("*.ixx", {install = true})
89
target_end()
10+
target("design-linked-list-test");
11+
set_group('test')
12+
set_default(false)
13+
if is_mode("test") then
14+
add_defines("__TEST__")
15+
add_packages("vcpkg::eventpp")
16+
end
17+
add_files("test.cpp");
18+
add_packages("vcpkg::gtest");
19+
add_deps("design-linked-list")
20+
target_end();

0 commit comments

Comments
 (0)