1
1
#define CATCH_CONFIG_MAIN
2
- #include " ../catch_amalgamated.hpp"
3
2
#include " merge_two_sorted_lists.cpp"
4
3
4
+ #include " ../catch_amalgamated.hpp"
5
+
5
6
// Helper function to create a linked list from vector
6
- ListNode* createList (const vector<int >& values) {
7
- if (values.empty ()) return nullptr ;
8
-
7
+ ListNode* createList (const std::vector<int >& values) {
8
+ if (values.empty ())
9
+ return nullptr ;
10
+
9
11
ListNode* head = new ListNode (values[0 ]);
10
12
ListNode* current = head;
11
-
13
+
12
14
for (size_t i = 1 ; i < values.size (); i++) {
13
15
current->next = new ListNode (values[i]);
14
16
current = current->next ;
15
17
}
16
-
18
+
17
19
return head;
18
20
}
19
21
20
22
// Helper function to convert linked list to vector for easy comparison
21
- vector<int > listToVector (ListNode* head) {
22
- vector<int > result;
23
+ std:: vector<int > listToVector (ListNode* head) {
24
+ std:: vector<int > result;
23
25
while (head) {
24
26
result.push_back (head->val );
25
27
head = head->next ;
@@ -44,8 +46,8 @@ TEST_CASE("Merge Two Sorted Lists", "[merge_two_sorted_lists]") {
44
46
ListNode* list1 = createList ({1 , 2 , 4 });
45
47
ListNode* list2 = createList ({1 , 3 , 4 });
46
48
ListNode* result = solution.mergeTwoLists (list1, list2);
47
-
48
- vector<int > expected = {1 , 1 , 2 , 3 , 4 , 4 };
49
+
50
+ std:: vector<int > expected = {1 , 1 , 2 , 3 , 4 , 4 };
49
51
REQUIRE (listToVector (result) == expected);
50
52
deleteList (result);
51
53
}
@@ -55,7 +57,7 @@ TEST_CASE("Merge Two Sorted Lists", "[merge_two_sorted_lists]") {
55
57
ListNode* list1 = nullptr ;
56
58
ListNode* list2 = nullptr ;
57
59
ListNode* result = solution.mergeTwoLists (list1, list2);
58
-
60
+
59
61
REQUIRE (result == nullptr );
60
62
}
61
63
@@ -64,16 +66,16 @@ TEST_CASE("Merge Two Sorted Lists", "[merge_two_sorted_lists]") {
64
66
ListNode* list1 = nullptr ;
65
67
ListNode* list2 = createList ({0 });
66
68
ListNode* result = solution.mergeTwoLists (list1, list2);
67
-
68
- vector<int > expected = {0 };
69
+
70
+ std:: vector<int > expected = {0 };
69
71
REQUIRE (listToVector (result) == expected);
70
72
deleteList (result);
71
73
72
74
// Reverse case: [5] and [] -> [5]
73
75
list1 = createList ({5 });
74
76
list2 = nullptr ;
75
77
result = solution.mergeTwoLists (list1, list2);
76
-
78
+
77
79
expected = {5 };
78
80
REQUIRE (listToVector (result) == expected);
79
81
deleteList (result);
@@ -83,16 +85,16 @@ TEST_CASE("Merge Two Sorted Lists", "[merge_two_sorted_lists]") {
83
85
ListNode* list1 = createList ({1 });
84
86
ListNode* list2 = createList ({2 });
85
87
ListNode* result = solution.mergeTwoLists (list1, list2);
86
-
87
- vector<int > expected = {1 , 2 };
88
+
89
+ std:: vector<int > expected = {1 , 2 };
88
90
REQUIRE (listToVector (result) == expected);
89
91
deleteList (result);
90
92
91
93
// Reverse order
92
94
list1 = createList ({3 });
93
95
list2 = createList ({1 });
94
96
result = solution.mergeTwoLists (list1, list2);
95
-
97
+
96
98
expected = {1 , 3 };
97
99
REQUIRE (listToVector (result) == expected);
98
100
deleteList (result);
@@ -101,7 +103,7 @@ TEST_CASE("Merge Two Sorted Lists", "[merge_two_sorted_lists]") {
101
103
list1 = createList ({2 });
102
104
list2 = createList ({2 });
103
105
result = solution.mergeTwoLists (list1, list2);
104
-
106
+
105
107
expected = {2 , 2 };
106
108
REQUIRE (listToVector (result) == expected);
107
109
deleteList (result);
@@ -112,16 +114,16 @@ TEST_CASE("Merge Two Sorted Lists", "[merge_two_sorted_lists]") {
112
114
ListNode* list1 = createList ({1 , 3 , 5 , 7 , 9 });
113
115
ListNode* list2 = createList ({2 , 4 });
114
116
ListNode* result = solution.mergeTwoLists (list1, list2);
115
-
116
- vector<int > expected = {1 , 2 , 3 , 4 , 5 , 7 , 9 };
117
+
118
+ std:: vector<int > expected = {1 , 2 , 3 , 4 , 5 , 7 , 9 };
117
119
REQUIRE (listToVector (result) == expected);
118
120
deleteList (result);
119
121
120
122
// Second list longer
121
123
list1 = createList ({1 , 5 });
122
124
list2 = createList ({2 , 3 , 4 , 6 , 7 });
123
125
result = solution.mergeTwoLists (list1, list2);
124
-
126
+
125
127
expected = {1 , 2 , 3 , 4 , 5 , 6 , 7 };
126
128
REQUIRE (listToVector (result) == expected);
127
129
deleteList (result);
@@ -131,8 +133,8 @@ TEST_CASE("Merge Two Sorted Lists", "[merge_two_sorted_lists]") {
131
133
ListNode* list1 = createList ({1 , 2 , 3 });
132
134
ListNode* list2 = createList ({4 , 5 , 6 });
133
135
ListNode* result = solution.mergeTwoLists (list1, list2);
134
-
135
- vector<int > expected = {1 , 2 , 3 , 4 , 5 , 6 };
136
+
137
+ std:: vector<int > expected = {1 , 2 , 3 , 4 , 5 , 6 };
136
138
REQUIRE (listToVector (result) == expected);
137
139
deleteList (result);
138
140
}
@@ -141,8 +143,8 @@ TEST_CASE("Merge Two Sorted Lists", "[merge_two_sorted_lists]") {
141
143
ListNode* list1 = createList ({7 , 8 , 9 });
142
144
ListNode* list2 = createList ({1 , 2 , 3 });
143
145
ListNode* result = solution.mergeTwoLists (list1, list2);
144
-
145
- vector<int > expected = {1 , 2 , 3 , 7 , 8 , 9 };
146
+
147
+ std:: vector<int > expected = {1 , 2 , 3 , 7 , 8 , 9 };
146
148
REQUIRE (listToVector (result) == expected);
147
149
deleteList (result);
148
150
}
@@ -151,8 +153,8 @@ TEST_CASE("Merge Two Sorted Lists", "[merge_two_sorted_lists]") {
151
153
ListNode* list1 = createList ({1 , 2 , 3 });
152
154
ListNode* list2 = createList ({1 , 2 , 3 });
153
155
ListNode* result = solution.mergeTwoLists (list1, list2);
154
-
155
- vector<int > expected = {1 , 1 , 2 , 2 , 3 , 3 };
156
+
157
+ std:: vector<int > expected = {1 , 1 , 2 , 2 , 3 , 3 };
156
158
REQUIRE (listToVector (result) == expected);
157
159
deleteList (result);
158
160
}
@@ -161,8 +163,8 @@ TEST_CASE("Merge Two Sorted Lists", "[merge_two_sorted_lists]") {
161
163
ListNode* list1 = createList ({-10 , -5 , 0 });
162
164
ListNode* list2 = createList ({-8 , -3 , 2 });
163
165
ListNode* result = solution.mergeTwoLists (list1, list2);
164
-
165
- vector<int > expected = {-10 , -8 , -5 , -3 , 0 , 2 };
166
+
167
+ std:: vector<int > expected = {-10 , -8 , -5 , -3 , 0 , 2 };
166
168
REQUIRE (listToVector (result) == expected);
167
169
deleteList (result);
168
170
}
@@ -171,8 +173,8 @@ TEST_CASE("Merge Two Sorted Lists", "[merge_two_sorted_lists]") {
171
173
ListNode* list1 = createList ({-100 , -50 , 50 });
172
174
ListNode* list2 = createList ({-75 , 0 , 100 });
173
175
ListNode* result = solution.mergeTwoLists (list1, list2);
174
-
175
- vector<int > expected = {-100 , -75 , -50 , 0 , 50 , 100 };
176
+
177
+ std:: vector<int > expected = {-100 , -75 , -50 , 0 , 50 , 100 };
176
178
REQUIRE (listToVector (result) == expected);
177
179
deleteList (result);
178
180
}
@@ -181,8 +183,8 @@ TEST_CASE("Merge Two Sorted Lists", "[merge_two_sorted_lists]") {
181
183
ListNode* list1 = createList ({-100 , 0 , 100 });
182
184
ListNode* list2 = createList ({-100 , 0 , 100 });
183
185
ListNode* result = solution.mergeTwoLists (list1, list2);
184
-
185
- vector<int > expected = {-100 , -100 , 0 , 0 , 100 , 100 };
186
+
187
+ std:: vector<int > expected = {-100 , -100 , 0 , 0 , 100 , 100 };
186
188
REQUIRE (listToVector (result) == expected);
187
189
deleteList (result);
188
190
}
@@ -191,32 +193,32 @@ TEST_CASE("Merge Two Sorted Lists", "[merge_two_sorted_lists]") {
191
193
ListNode* list1 = createList ({5 , 5 , 5 });
192
194
ListNode* list2 = createList ({5 , 5 });
193
195
ListNode* result = solution.mergeTwoLists (list1, list2);
194
-
195
- vector<int > expected = {5 , 5 , 5 , 5 , 5 };
196
+
197
+ std:: vector<int > expected = {5 , 5 , 5 , 5 , 5 };
196
198
REQUIRE (listToVector (result) == expected);
197
199
deleteList (result);
198
200
}
199
201
200
202
SECTION (" Maximum constraint lengths" ) {
201
203
// Create lists with maximum allowed length (50 nodes each)
202
- vector<int > values1, values2;
204
+ std:: vector<int > values1, values2;
203
205
for (int i = 0 ; i < 50 ; i += 2 ) {
204
206
values1.push_back (i);
205
207
}
206
208
for (int i = 1 ; i < 50 ; i += 2 ) {
207
209
values2.push_back (i);
208
210
}
209
-
211
+
210
212
ListNode* list1 = createList (values1);
211
213
ListNode* list2 = createList (values2);
212
214
ListNode* result = solution.mergeTwoLists (list1, list2);
213
-
214
- vector<int > expected;
215
+
216
+ std:: vector<int > expected;
215
217
for (int i = 0 ; i < 50 ; i++) {
216
218
expected.push_back (i);
217
219
}
218
-
220
+
219
221
REQUIRE (listToVector (result) == expected);
220
222
deleteList (result);
221
223
}
222
- }
224
+ }
0 commit comments