@@ -55,9 +55,11 @@ class UniqueList : public List {
5555 // update head.
5656 head = std::move (current->next );
5757 current = head.get ();
58+ --count;
5859 } else {
5960 previous->next = std::move (current->next );
6061 current = previous->next .get ();
62+ --count;
6163 }
6264 } else {
6365 // First occurrence: mark as visited and move forward.
@@ -69,13 +71,26 @@ class UniqueList : public List {
6971 }
7072};
7173
72- namespace {
73- struct TestRunner {
74+ int main () {
7475 int total = 0 ;
7576 int failed = 0 ;
7677
77- void expectEqual (const List &got, const List &expected,
78- const std::string &label) {
78+ auto listToString = [](const List &list) {
79+ std::ostringstream oss;
80+ oss << " {" ;
81+ bool first = true ;
82+ for (int value : list) {
83+ if (!first)
84+ oss << " , " ;
85+ oss << value;
86+ first = false ;
87+ }
88+ oss << " }" ;
89+ return oss.str ();
90+ };
91+
92+ auto expectEqual = [&](const List &got, const List &expected,
93+ const std::string &label) {
7994 ++total;
8095 if (got == expected) {
8196 std::cout << " [PASS] " << label << " \n " ;
@@ -84,106 +99,83 @@ struct TestRunner {
8499 ++failed;
85100 std::cout << " [FAIL] " << label << " expected=" << listToString (expected)
86101 << " got=" << listToString (got) << " \n " ;
87- }
102+ };
88103
89- void summary () const {
104+ auto summary = [&]() {
90105 std::cout << " Tests: " << total - failed << " passed, " << failed
91106 << " failed, " << total << " total\n " ;
107+ };
108+
109+ {
110+ UniqueList duplicateList;
111+ duplicateList.append (1 );
112+ duplicateList.append (2 );
113+ duplicateList.append (3 );
114+ duplicateList.append (4 );
115+ duplicateList.append (4 );
116+ duplicateList.append (5 );
117+
118+ UniqueList uniqueList;
119+ uniqueList.append (1 );
120+ uniqueList.append (2 );
121+ uniqueList.append (3 );
122+ uniqueList.append (4 );
123+ uniqueList.append (5 );
124+
125+ duplicateList.deleteDuplication ();
126+ expectEqual (duplicateList, uniqueList, " delete duplicates #1" );
92127 }
93128
94- private:
95- static std::string listToString (const List &list) {
96- std::ostringstream oss;
97- oss << " {" ;
98- for (unsigned int i = 0 ; i < list.size (); ++i) {
99- if (i > 0 )
100- oss << " , " ;
101- oss << list.get (i);
102- }
103- oss << " }" ;
104- return oss.str ();
129+ {
130+ UniqueList duplicateList;
131+ duplicateList.append (1 );
132+ duplicateList.append (2 );
133+ duplicateList.append (3 );
134+ duplicateList.append (4 );
135+ duplicateList.append (5 );
136+
137+ UniqueList uniqueList;
138+ uniqueList.append (1 );
139+ uniqueList.append (2 );
140+ uniqueList.append (3 );
141+ uniqueList.append (4 );
142+ uniqueList.append (5 );
143+
144+ duplicateList.deleteDuplication ();
145+ expectEqual (duplicateList, uniqueList, " delete duplicates #2" );
105146 }
106- };
107- } // namespace
108-
109- // ------------------- Test Cases -------------------
110-
111- void test1 (TestRunner &runner) {
112- UniqueList duplicateList;
113- duplicateList.append (1 );
114- duplicateList.append (2 );
115- duplicateList.append (3 );
116- duplicateList.append (4 );
117- duplicateList.append (4 );
118- duplicateList.append (5 );
119-
120- UniqueList uniqueList;
121- uniqueList.append (1 );
122- uniqueList.append (2 );
123- uniqueList.append (3 );
124- uniqueList.append (4 );
125- uniqueList.append (5 );
126-
127- duplicateList.deleteDuplication ();
128- runner.expectEqual (duplicateList, uniqueList, " delete duplicates #1" );
129- }
130-
131- void test2 (TestRunner &runner) {
132- UniqueList duplicateList;
133- duplicateList.append (1 );
134- duplicateList.append (2 );
135- duplicateList.append (3 );
136- duplicateList.append (4 );
137- duplicateList.append (5 );
138-
139- UniqueList uniqueList;
140- uniqueList.append (1 );
141- uniqueList.append (2 );
142- uniqueList.append (3 );
143- uniqueList.append (4 );
144- uniqueList.append (5 );
145-
146- duplicateList.deleteDuplication ();
147- runner.expectEqual (duplicateList, uniqueList, " delete duplicates #2" );
148- }
149147
150- void test3 (TestRunner &runner) {
151- UniqueList duplicateList;
152- duplicateList.append (1 );
153- duplicateList.append (1 );
154- duplicateList.append (1 );
155- duplicateList.append (1 );
156- duplicateList.append (2 );
148+ {
149+ UniqueList duplicateList;
150+ duplicateList.append (1 );
151+ duplicateList.append (1 );
152+ duplicateList.append (1 );
153+ duplicateList.append (1 );
154+ duplicateList.append (2 );
157155
158- UniqueList uniqueList;
159- uniqueList.append (1 );
160- uniqueList.append (2 );
156+ UniqueList uniqueList;
157+ uniqueList.append (1 );
158+ uniqueList.append (2 );
161159
162- duplicateList.deleteDuplication ();
163- runner. expectEqual (duplicateList, uniqueList, " delete duplicates #3" );
164- }
160+ duplicateList.deleteDuplication ();
161+ expectEqual (duplicateList, uniqueList, " delete duplicates #3" );
162+ }
165163
166- void test4 (TestRunner &runner) {
167- UniqueList duplicateList;
168- duplicateList.append (1 );
169- duplicateList.append (1 );
170- duplicateList.append (1 );
171- duplicateList.append (1 );
172- duplicateList.append (1 );
164+ {
165+ UniqueList duplicateList;
166+ duplicateList.append (1 );
167+ duplicateList.append (1 );
168+ duplicateList.append (1 );
169+ duplicateList.append (1 );
170+ duplicateList.append (1 );
173171
174- UniqueList uniqueList;
175- uniqueList.append (1 );
172+ UniqueList uniqueList;
173+ uniqueList.append (1 );
176174
177- duplicateList.deleteDuplication ();
178- runner. expectEqual (duplicateList, uniqueList, " delete duplicates #4" );
179- }
175+ duplicateList.deleteDuplication ();
176+ expectEqual (duplicateList, uniqueList, " delete duplicates #4" );
177+ }
180178
181- int main () {
182- TestRunner runner;
183- test1 (runner);
184- test2 (runner);
185- test3 (runner);
186- test4 (runner);
187- runner.summary ();
179+ summary ();
188180 return 0 ;
189181}
0 commit comments